环境:VS2008以上,ASP.NET
数据库:SQL2008
使用语言:C#、JS、HTML
功能介绍:只是一个简单的设计,此处登录的是采用的网页登录方式,即B/S。
具体实现:1、验证用户名和密码是否输入正确。
2、验证码采用图片输出,并且验证输入是否正确。
3、密码采用MD5验证(存进去就是MD5,存进去本文不做介绍,可以自己研究下,改个SQL语句即可)
在登录界面,使用3 个Label 分别显示“ID”、“密码”和“验证码”。接着使用3 个TextBox 控件,用来让用户输入ID、密码和验证码。其次使用3 个RequiredFieldValidator 来实现对ID、密码和验证码是否输入的验证提示。ValidationSummary 来显示错误的验证信息。
使用一个普通按钮(button )让用户在单击按钮控件时,引发btnSubmit_Click ()事件进行网页跳转,使用一个图形显示控件Image 显示验证码图片。
建立一个ASP.NET网站
btnSubmit_Click()触发事件
protectedvoid btnSubmit_Click(object sender, EventArgs e)
{
if (txtValidCode.Text.ToUpper().Equals(Session["ValidCode"].ToString().ToUpper()))
//输入验证码时无论是大小写皆读取为大写,方便验证 {
boolbFlag = new DataClass().IsUserExist(int.Parse(txtID.Text.ToString().Trim()), txtPwd.Text);
//调用了自定义类中的验证用户和密码是否存在的方法 if (bFlag)
{
Response.Write("<script>alert('ID 和密码输入正确!')</script>");
//验证成功 }
else
{
Response.Write("<script>alert('ID 和密码输入错误,请重新输入!')</script>");
//用户米密码验证失败 }
}
else
{
Response.Write("<script>alert('验证码输入错误,请重新输入!')</script>");
//验证码验证失败 }
}
类DataClass(自己添加一个类文件)
public class DataClass
{
public DataClass()
{
//构造函数 }
// 获取Sql Server 2008数据库连接
// <returns>返回一个已经建立的连接</returns>
private SqlConnection GetSqlServerConn()
{
SqlConnection sqlConn;
//定义SQl Server连接对象
string sConnection = "Data Source=localhost;Initial Catalog=DB_1;User ID=sa;Password=sa123;";
//直接使用语句,localhost表示连接本地数据库,你可以改成你要的IP里的数据库,这里就涉及到服务器的设计了,此处就不介绍了。Initial Catalog数据库的名字,User ID数据库用户名,Password数据库密码。当然这里你可以读取web.config配置文件的ConnectionString节点获取连接字符串,程序安全性可以提高。
sqlConn = new SqlConnection(strConn);
//生成数据库连接对象
sqlConn.Open();
//打开数据库连接
return sqlConn;
//返回数据库连接对象以供调用
}
// 关闭已打开的数据库连接
private void CloseSqlServerConn(SqlConnection sqlConn)
{
if (sqlConn.State == ConnectionState.Open)
//如果数据库连接处于关闭状态,则打开此连接
{
sqlConn.Close();
}
}
// 判断指定的用户是否存在
// <returns>返回判断结果:true 存在; false 不存在</returns> public bool IsUserExist(int iID, string strPwd)
{
string strComm = "select * from [UserInfo] where
id=@id and
pwd=@pwd";
SqlConnection sqlConn = this.GetSqlServerConn();
//调用GetSqlServerConn()方法获得数据库连接 SqlCommand sqlComm = new SqlCommand();
//生成数据库命令操作对象
try
{
sqlComm.CommandText = strComm;
//指定要执行的SQL命令 sqlComm.Connection = sqlConn;
//指定要使用的SQL连接 sqlComm.Parameters.AddWithValue("@ID", iID);
//为SQL命令的参数赋值
sqlComm.Parameters.AddWithValue("@Pwd", GetMD5(strPwd));
object obj = sqlComm.ExecuteScalar();
//执行SQL命令返回第一行第一列的值
if (int.Parse(obj.ToString()) > 0)
//判断是否存在数据
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
}
finally
{
this.CloseSqlServerConn(sqlConn);
//调用方法关闭数据库
}
} private string GetMD5(string strPwd)
{
//之前已经发过此段程序,此处不再发。 }
}
验证码要添加一个ashx文件(一般处理程序)。
public class Valid : IHttpHandler, IRequiresSessionState
{
// 生成随机字符串
// <param name="num">随机字符的个数</param>
private string GetValidCode(int num)
{ string strRandomCode = "AB1CDEF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ";
//定义要随机抽取的字符串
char[] chastr = strRandomCode.ToCharArray();
//将定义的字符串转成字符数组 StringBuilder sbValidCode = new StringBuilder();
//定义StringBuilder对象用于存放验证码
Random rd = new Random();
//随机函数,随机抽取字符
for (int i = 0; i < num; i++)
{
//以strRandomCode的长度产生随机位置并截取该位置的字符添加到StringBuilder对象中
sbValidCode.Append(strRandomCode.Substring(rd.Next(0, strRandomCode.Length), 1));
}
return sbValidCode.ToString();
} public void ProcessRequest(HttpContext context)
{
string strValidCode = GetValidCode(5);
// 产生5位随机字符
context.Session["ValidCode"] = strValidCode;
//将字符串保存到Session中,以便需要时进行验证
Bitmap image = new Bitmap(120, 30);
//定义宽120像素,高30像素的数据定义的图像对象
Graphics g = Graphics.FromImage(image);
//绘制图片
try
{ Random random = new Random();
//生成随机对象
g.Clear(Color.White);
//清除图片背景色
for (int i = 0; i < 25; i++)
// 随机产生图片的背景噪线
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
} Font font = new System.Drawing.Font("新宋体", 20, (System.Drawing.FontStyle.Bold));
//设置图片字体风格 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 3, true);
//设置画笔类型
g.DrawString(strValidCode, font, brush, 5, 2);
//绘制随机字符 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
//绘制图片的前景噪点 System.IO.MemoryStream ms = new System.IO.MemoryStream();
//建立存储区为内存的流
image.Save(ms, ImageFormat.Gif);
//将图像对象储存为内存流
context.Response.ClearContent();
//清除当前缓冲区流中的所有内容
context.Response.ContentType = "image/Gif";
//设置输出流的MIME类型
context.Response.BinaryWrite(ms.ToArray());
//将内存流写入到输出流
}
finally
{
g.Dispose();
image.Dispose();
}
} public bool IsReusable
{
get
{
return false;
}
}
}
以上步骤基本完成所有内容设计,但是在调试过程中,时常在验证码输出部分出现未实例化错误,为了解决这一问题,添加了一段JS程序,来刷新验证码。加在登录页面的,aspx文件中。
<script type="text/javascript">
function resfreshValidateCode() {
var img = document.getElementById("imgValidCode");
img.src = "ValidCode.ashx?"+Math.random();
}
</script>
思路和所有程序已经贴出来了,也是3个多月前写的了,简化了下,验证码那,可以不用图片显示的操作,直接数据输出也可以。那个问我要C#登录设计的猴子可以看下,已经很全面。数据库的设置还有设计,我就不写了,百度一堆。数据库的选择随你,不过语句记得调换。懒得打包,自己调试。
[ 此帖被幻希空°在2012-09-24 15:37重新编辑 ]