环境: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#登录设计的猴子可以看下,已经很全面。数据库的设置还有设计,我就不写了,百度一堆。数据库的选择随你,不过语句记得调换。懒得打包,自己调试。
数据库: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重新编辑 ]

前排
看不懂。