ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)
2
3 using System;
4 using System.Web;
5 using System.Web.SessionState;
6 using System.Drawing;
7 using System.Drawing.Imaging;
8 using System.Text;
9
10 /// <summary>
11 /// ValidateImageHandler 生成网站验证码功能
12 /// </summary>
13 public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
14 {
15 int intLength = 5; //长度
16 string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中
17 public ValidateImageHandler()
18 {
19 }
20
21 /// <summary>
22 /// 生成验证图片核心代码
23 /// </summary>
24 /// <param name="hc"></param>
25 public void ProcessRequest(HttpContext hc)
26 {
27 //设置输出流图片格式
28 hc.Response.ContentType = "image/gif";
29
30 Bitmap b = new Bitmap(200, 60);
31 Graphics g = Graphics.FromImage(b);
32 g.FillRectangle(new SolidBrush(Color.YellowGreen), 0, 0, 200, 60);
33 Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
34 Random r = new Random();
35
36 //合法随机显示字符列表
37 string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
38 StringBuilder s = new StringBuilder();
39
40 //将随机生成的字符串绘制到图片上
41 for (int i = 0; i < intLength; i++)
42 {
43 s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
44 g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
45 }
46
47 //生成干扰线条
48 Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
49 for (int i = 0; i < 10; i++)
50 {
51 g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
52 }
53 b.Save(hc.Response.OutputStream, ImageFormat.Gif);
54 hc.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否一致
55 hc.Response.End();
56
57 }
58
59 /// <summary>
60 /// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
61 /// </summary>
62 public bool IsReusable
63 {
64 get
65 {
66 return true;
67 }
68 }
69 }
70
2. 前台页面代码
2 <TitleTextStyle BackColor="#507CD1" Font-Bold="True" Font-Size="0.9em" ForeColor="White" />
3 <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
4 <TextBoxStyle Font-Size="0.8em" />
5 <LoginButtonStyle BackColor="White" BorderColor="#507CD1" BorderStyle="Solid" BorderWidth="1px"
6 Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" />
7 <LayoutTemplate>
8 <table border="0" cellpadding="4" cellspacing="0" style="border-collapse: collapse">
9 <tr>
10 <td style="width: 292px">
11 <table border="0" cellpadding="0">
12 <tr>
13 <td align="center" colspan="2" style="font-weight: bold; font-size: 0.9em; color: white;
14 background-color: #507cd1">
15 登录</td>
16 </tr>
17 <tr>
18 <td align="left" style="width: 84px; height: 31px;">
19 <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">用户名:</asp:Label></td>
20 <td style="height: 31px; width: 215px;">
21 <asp:TextBox ID="UserName" runat="server" Font-Size="0.8em" Width="113px"></asp:TextBox>
22 <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
23 ErrorMessage="必须填写“用户名”。" ToolTip="必须填写“用户名”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
24 </td>
25 </tr>
26 <tr>
27 <td align="left" style="width: 84px">
28 <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">密码:</asp:Label></td>
29 <td style="width: 215px">
30 <asp:TextBox ID="Password" runat="server" Font-Size="0.8em" TextMode="Password"></asp:TextBox>
31 <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
32 ErrorMessage="必须填写“密码”。" ToolTip="必须填写“密码”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
33 </td>
34 </tr>
35 <tr>
36 <td style="width: 84px; height: 4px;" align="left">
37 验证码:</td>
38 <td valign="middle" style="height: 31px; width: 215px;" align="left">
39 <asp:TextBox ID="TextBox1" runat="server" Font-Size="0.8em" TextMode="Password"></asp:TextBox>
40
41 </tr>
42 <tr>
43 <td align="left" colspan="2" style="color: red">
44 <asp:CheckBox ID="RememberMe" runat="server" Text="下次记住我。" /> </td>
45 </tr>
46 <tr>
47 <td align="right" colspan="2">
48 <asp:Button ID="LoginButton" runat="server" BackColor="White" BorderColor="#507CD1"
49 BorderStyle="Solid" BorderWidth="1px" CommandName="Login" Font-Names="Verdana"
50 Font-Size="0.8em" ForeColor="#284E98" Text="登录" ValidationGroup="Login1" />
51 </td>
52 </tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 </LayoutTemplate>
58
59 </asp:Login>
60
3.这里因为使用的是默认 *.asah处理文件类型,在machine.config文件中已经有此类型的默认注册,
2 <add verb="*" path="*.asah" type="System.Web.UI.SimpleHandlerFactory" />
3 </httpHandlers>
4
注意:
1.再注册一下也不会出错,会覆盖machine.config文件配置
2.如果在同一个配置文件中注册多次,默认后者也会覆盖前者.
3.如果其它格式(系统默认没有注册)的,务必要在Web.config文件中注册一下.
ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)相关推荐
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)...
(一) . 运行示例效果 * 运行后用鼠标拖动蓝色的<马>到任意位置, 将浏览器关闭后, 再重新访问本页面, 会发现<马>仍然在您拖到的位置 (二). AjaxPro.NET简 ...
- 转载:Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
作者: Maco 发布日期: 2006-8-28 11:09:28 (一) . 运行示例图 1. 待导出数据的GridView图: 2. 生成的Excel文件 (二). 代码 1. 前台页面 Gr ...
- [导入]Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]...
Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载] 文章来源:http://blog.csdn.net/chengking/archive/2007/0 ...
- [导入]Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][示例代码下载]...
Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][重点推荐控件][示例代码下载] 文章来源:http://blog.csdn.net/chengkin ...
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 /// <summary> 2 /// INIFILE 操作类 3 / ...
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)...
(一). 概要 开发<数据绑定用户控件>, 要实现一个DataSource属性, 并且能够自动识别不同的数据源, 如: ArrayList, DataTable, DataSet, XM ...
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
(一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype.YUI.jQuery.mootools.Bindows, Scriptaculous, FCKEditor 等, 都非 ...
- Winform中实现中文验证码(附代码下载)
场景 中文验证码效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新 ...
- [导入]Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)
文章来源:http://blog.csdn.net/ChengKing/archive/2006/12/21/1452160.aspx
最新文章
- 在bootstrap ace样式框架上修改的后台管理型模板(Tab页后台管理模板)
- mysql100万数据一键下载csv_使用PHP来导入包含100万条数据的csv文件,请问你最快多久能全部导入mysql 数据库?...
- 网课助手浏览器版怎么更新_MIUI版本更新动态:跨屏协作来袭(第57期)
- 费用节省 50%,函数计算 FC 助力分众传媒降本增效
- Java反射之从对象获取值
- c# 可变二维数组_C#| 具有固定行大小和可变列大小的二维数组
- 客户机和服务器在s7通信中各有什么作用,哪些通信口可以进行 Modbus TCP 通讯,作为 Modbus 服务器的 SIMATIC S7 CPU 可以...
- 如何用c语言制作飞机订票系统,C语言编程飞机订票系统如何设计?
- 自动生成 Makefile 的全过程详解
- swot分析模板_营销策划方案怎么写?价值不菲的营销策划架构44页PPT模板
- 客快物流大数据项目(五十一):数据库表分析
- 计算机类学术期刊SCI/EI期刊核心期刊有哪些?
- 解决windows网络代理篡改,浏览器不能上网问题
- 18118 勇者斗恶龙(c++ STL sort的运用)
- 互联网APP监控即时报警解决初步方案
- 色温(Kelvin)到RGB的转换:算法和样例
- K8s、Docker、CRI、OCI 之间的爱恨情仇
- 网站站点地图SiteMap生成程序(PHP)
- HTML - 鼠标光标属性
- 【NOIP2010】【Luogu1199】三国游戏
热门文章
- 使用Python,Matplotlib显示RGB图像
- python基础知识整理 第三节 :函数
- 1. 编程规范和编程安全指南--python
- 读后感与机翻《人类因果学习的分解:自下而上的联想学习和自上而下的图式推理》
- Linux下视频截取命令
- JAVA求是否为闰年,for-while循环,输出你好
- 【MediaPipe】(3) AI视觉,人脸识别,附python完整代码
- LeetCode刷题记录9——58. Length of Last Word(easy)
- python 函数递归一次增加一次变量_python3--函数(函数,全局变量和局部变量,递归函数)...
- java string 占位符_驳《阿里「Java开发手册」中的1个bug》?