ASP.NET验证码生成与识别
? 一般验证码页面只输出一个图片而不进行其他业务处理,所以验证码一般放在一般处理程序(httpHandler)页面中,而如果将验证码生成代码放到一般处理程序中,要将生成验证码保存在Session中,这里我们假设保存到session["ValidCode"]中,则需要添加对 System.Web.SessionState 命名空间的引用,并要实现 IHttpHandler和IRequiresSessionState接口,这样才能实现将验证码保存到session中,生成验证码示例代码如下: 1 using System; 2 System.Collections.Generic; 3 System.Drawing; 4 System.Drawing.Drawing2D; 5 System.Text; 6 System.Web; 7 System.Web.SessionState; 8 9 namespace 验证码的生成与识别 10 { 11 /// <summary> 12 /// 生成验证码 13 </summary> 14 public class ValidCodeHandler : IHttpHandler,IRequiresSessionState 15 { 16 17 void ProcessRequest(HttpContext context) 18 { 19 // 产生5位随机字符 20 string strValidCode = GetValidCode(5); 21 22 如果要使用context.Session,需要添加命名空间System.Web.SessionState using System.Web.SessionState; ,然后再继承IRequiresSessionState接口 23 将字符串保存到Session中,以便需要时进行验证 24 context.Session["ValidCode"] = strValidCode; 25 定义宽120像素,高30像素的数据定义的图像对象 26 Bitmap image = new Bitmap(120,40); 27 绘制图片 28 Graphics g = Graphics.FromImage(image); 29 try 30 { 31 创建随机数生成器 32 Random random = new Random(); 33 清除图片背景色 34 g.Clear(Color.White); 35 随机产生图片的背景噪线 36 for (int i = 0; i < 25; i++) 37 { 38 int x1 = random.Next(image.Width); 39 int x2 = 40 int y1 = random.Next(image.Height); 41 int y2 = 42 g.DrawLine( Pen(Color.Silver),x1,y1,x2,y2); 43 } 44 设置图片字体风格 45 Font font = new System.Drawing.Font(微软雅黑",1)">20,(System.Drawing.FontStyle.Bold)); 46 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,image.Width,image.Height),Color.Blue,Color.DarkRed,1)">3,true);设置画笔类型 47 绘制随机字符 48 g.DrawString(strValidCode,font,brush,1)">5,1)">2); 49 绘制图片的前景噪点 50 g.DrawRectangle(new Pen(Color.Silver),image.Width - 1,image.Height - 1); 51 建立存储区为内存的流 52 System.IO.MemoryStream ms = System.IO.MemoryStream(); 53 将图像对象储存为内存流 54 image.Save(ms,System.Drawing.Imaging.ImageFormat.Png); 55 清除当前缓冲区流中的所有内容 56 context.Response.ClearContent(); 57 设置输出流的MIME类型 58 context.Response.ContentType = image/png"; 59 将内存流写入到输出流 60 context.Response.BinaryWrite(ms.ToArray()); 61 } 62 finally 63 64 释放资源 65 g.Dispose(); 66 image.Dispose(); 67 68 } 69 70 71 生成随机字符串 72 73 <param name="num">随机字符的个数</param> 74 <returns>返回随机产生的字符串</returns> 75 private string GetValidCode(int num) 76 { 77 定义一个允许的字符组成的字符串 78 string strRandomCode = ABCD1EF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ"; 定义要随机抽取的字符串 79 char[] chaStr = strRandomCode.ToCharArray(); 第二种方法:将定义的字符串转成字符数组 80 StringBuilder sbValidCode = new StringBuilder(); 定义StringBuilder对象用于存放验证码 81 随机数生成器,用于随机产生验证码中字符 82 Random rnd = new Random(); 随机函数,随机抽取字符 83 0; i < num; i++) 84 85 随机获取一个字符 86 char a = strRandomCode[rnd.Next(0 87 拼接字符 88 sbValidCode.Append(a); 89 90 return sbValidCode.ToString(); 91 92 93 94 95 bool IsReusable 96 97 get 98 99 return false100 101 102 } 103 } 生成验证码之后,就是用户的输入与验证码的对比,刚才我们已经将验证码保存到session中,检查用户输入的验证码是否正确只需将用户输入值与保存到session中的值即【session["ValidCode"].ToString()】(类型转换,session["ValidCode"]转化为string类型)比较即可,我们可以在code页面验证,也可在一般处理程序中验证(更为常用,可利用Ajax技术,提高用户体验), code验证示例代码: 1 判断用户输入验证码与保存在session中验证码是否一致 2 if (txtValidCode.Text.ToUpper() == Session[Code"].ToString().ToUpper()) 一般处理程序示例代码如下: 1 2 3 4 5 6 7 8 9 验证用户输入验证码是否正确 10 11 Handler1 : IHttpHandler,1)">12 13 14 15 16 context.Response.ContentType = text/plain17 获取用户输入验证码 18 string strCode = context.Request[txtValidCode].ToString(); 19 ToUpper(),这里验证码不区分大小写 20 if (strCode.ToUpper() == context.Session[].ToString().ToUpper()) 21 22 context.Response.Write(验证码正确!23 24 else 25 26 context.Response.Write(验证码错误!27 28 29 30 31 32 33 34 35 36 37 38 } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET页面之间传值的方式之Application实例详解
- asp.net c#membership:如何做一个GetUsersInRoles(多个角色
- asp.net-mvc – 查找:DisplayTemplates速度
- asp.net-core – 如何从Microsoft.NetCore.App 2.0更新到2.
- asp.net-mvc – 如何在启动应用程序之前在system.web.mvc中
- asp.net – IIS7中的SQL Server和Windows身份验证
- asp.net-mvc – 将多个参数传递给控制器???
- 何时使用PageAsyncTask(异步asp.net页面)的示例
- ASP.NET rdlc,外部图像不显示PDF格式的图像
- asp.net-mvc-3 – asp.net mvc 3和elmah.axd – 又是404
- asp.net – 由于无法检索用户的本地应用程序数据
- asp.net-mvc-3 – MVC 3使用修改的查询字符串值重
- asp.net-mvc – ASP.NET MVC可配置验证
- asp.net-mvc – 我的表单应该在我的编辑器模板内
- asp.net-mvc-3 – 一个窗体中的多个提交输入
- 如何为ASP.Net创建一个准系统HttpApplication(没
- asp.net – 动态编译的文件在.NET中使用csc.exe吗
- asp.net – 元素’system.webServer’有无效的子
- asp.net中的基本形式认证安全性如何?
- asp.net-mvc – asp.net mvc – 需要存储当前请求