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文件中已经有此类型的默认注册,
4
注意:
1.再注册一下也不会出错,会覆盖machine.config文件配置
2.如果在同一个配置文件中注册多次,默认后者也会覆盖前者.
3.如果其它格式(系统默认没有注册)的,务必要在Web.config文件中注册一下.
相关文章:

linux下配置ip地址的方法
(1)Ifconfig命令第一种使用ifconfig命令配置网卡的ip地址。此命令通常用来零时的测试用,计算机启动后ip地址的配置将自动失效。具体用法如下。Ipconfig ethx ipadd netmask x.x.x.x。其中ethx中的x代表第几快以太网卡,…

百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队
1月7日,2020年小米百万美金技术大奖揭晓,经过小米集团技术委员会多轮评选,手机部小米秒充团队、软件与体验部的MIUI隐私保护团队,双双赢得了价值100万美元的技术大奖(小米受限股)。 120W有线秒充ÿ…

在 Android 应用程序中使用 SQLite 数据库以及怎么用
part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库。它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能。此外它还是开源的,不论什么人都能够使用它。很多开源项目((Mozilla, PHP, Python…

asp.net 2.0 权限树的控制
做权限的时候,主要实现如下功能1、该节点可以访问,则他的父节点也必能访问;2、该节点可以访问,则他的子节点也都能访问;3、该节点不可访问,则他的子节点也不能访问。使用带CheckBox的数型结构能得到很好的用户体验,可是…

腾讯首位17级杰出科学家诞生:腾讯AI Lab负责人张正友
2021年1月8日腾讯宣布,腾讯Robotics X实验室及腾讯AI Lab负责人张正友博士成为腾讯首位17级研究员/杰出科学家,17级是腾讯历史上最高的专业职级。 腾讯AI Lab及腾讯Robotics X实验室负责人张正友博士荣获这一殊荣的张正友博士,领导创建了世界…

论性能测试的必要性
论性能测试的必要性说起为什么要进行性能测试,前面已经多少谈到一些。下面,从“性能测试与功能测试关系”及“性能自动化测试优势”两方面给读者作答。1. 性能测试与功能测试关系性能测试和功能测试是测试工作中两个不同的方面,只是在关注的内…

Spring学习系列(二) 自动化装配Bean
一、Spring装配-自动化装配 Component和ComponentScan 通过spring注解(Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组件扫描默认是不启动的,需要显式的配置Spring,从而命令Spring…

如何让SELECT 查询结果额外增加自动递增序号
图表1如果数据表本身并不内含自动地增编号的字段时,要怎么做才能够让SELECT查询结果如图表1所示,额外增加自动递增序号呢?我们提供下列五种方法供您参考:USE北风贸易;GO/* 方法一*/SELECT序号(SELECT COUNT(客户编号)FROM 客户AS …

UVa 10131
1 /*2 3 * 类似于最长递减子序列4 */5 #include<stdio.h>6 7 #include<string.h>8 #include<algorithm>9 using namespace std; 10 #define Max(x,y) (x>y?x:y) 11 #define max 10005 12 struct node{ 13 int w,s,c; 14 }a[max]; 15 int dp[max]; 16…
再见 VBA!神器工具统一 Excel 和 Python
作者 | 东哥起飞来源 | Python数据科学经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评。这次也不例外,我要再推荐一个,而且是个爆款神器。Excel和Jupyter Notebok都是我每天必用的工具,而且两个工具经常协同工作&…

Android 开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮。如果您是一位2013年刚刚…

SQL Server各种日期计算方法
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几…

TensorFlow入门
为什么80%的码农都做不了架构师?>>> TensorFlow核心教程 导入TensorFlow计算图tf.train API 完成程序tf.contrib.learn 基本用法自定义模型下一步原文链接 : https://www.tensorflow.org/get_started/get_started 译文链接 : http://www.apache.wiki/pa…
C#实现类似qq的屏幕截图程序
因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单,用到的技术也不多,只能实现类似qq的截图功能(方法虽然很笨) 程序流程如下:1.截取整个屏幕并保存 2.新开一个全屏窗口,将保…

构建RESTful风格的WCF服务
RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。 RESTful的几点好处: 1、简单的数据通讯方式,基于HTTP协议。避免了使用复杂的数据通讯方式。 …
又一起“删库”:链家程序员怒删公司 9TB 数据,被判 7 年
整理 | 王晓曼来源 | CSDN(ID:CSDNnews)1月6日,北京市第一中级人民法院公布前链家员工破坏计算机信息系统罪一案的刑事裁定书,被告人因不满工作调整,删公司9TB数据。北京市海淀区人民法院判决认定ÿ…

hbase以mr导数据方式
./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator"," -Dimporttsv.columnsHBASE_ROW_KEY,f1:name,f1:age,f1:addr t1 /zldata/demo1.csv转载于:https://www.cnblogs.com/sajia/p/6972420.html

Php中正则小结(一)
一.概念 语法模式类似perl.表达式必须用分隔符闭合,比如一个正斜杠(/). 分隔符可以是任意非字母非数字,除反斜杠(\)和空字节之外的非空白ascii字符 如果分隔符 在表达式中使用,需要使用反斜线进行转义。 二.组成 元字符 一个正则表达式基本组…

在C#.net中如何操作XML
在C#.net中如何操作XML需要添加的命名空间:using System.Xml; 定义几个公共对象:XmlDocument xmldoc ;XmlNode xmlnode ;XmlElement xmlelem ; 1,创建到服务器同名目录下的xml文件: 方法一:xmldoc new XmlDocument…
精彩碰撞!神经网络和传统滤波竟有这火花?
作者 | 凌霄出品 | AI大本营(ID:rgznai100)惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展,该装置进入了许多新的应用领域,从无人驾驶飞机到人体运动跟踪。在捷联式 …

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...
2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题) 16.信息系统的安全威胁分成七类,其中不包括()A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)
(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…
CSDN送会员?免费的!都来领!
距离春节还有不到一个月你准备好给家人的春节礼物了吗?疫情下,为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日,人人都可免费领会员!助你提前实现CSDN会员卡自由!奖品多多,不仅有CSDN月卡会…

BGP相邻体之间磋商的过程
一.BGP的几个概念 空闲(IDLE) 等待由管理员发起的START事件 正确,到连接状态 错误,回到空闲状态 连接状态(Connect) 等待TCP的连接是否成功,以期望获得一个对等体 正确,到开放发送Op…

去除ios input部分默认样式
input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能
Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)
2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API,但是怎么使用呢,下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面,ImageX.DeletePages 方法允许开发人员…
用Matplotlib轻松复刻分析图,看看哪个城市买房最自由
作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源,发布了「2020 新一线城市居住报告」:图1而在这个报告中有几张数据可视化作品还是比较可圈可点的,作为(在模仿中精进数据可视化&…

Python 代码规范
前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…