ASP.NET验证码控件(附详细用法)
- 格式:doc
- 大小:120.00 KB
- 文档页数:10
共享一款验证码控件(附详细用法)最近在完善我的毕业设计——(C#)实现的三层构架的二手交易系统,觉得有必要加上验证码,这样网站的安全性会提升一些。
于是利用百度、谷歌反复搜索,终于找到了一款比较牛叉的验证码控件。
原作者不详,这里附上一个地址>>>。
程序我做了一些小小的修改。
按原文所说的操作,根本编译不了。
原文的用法可以查看上面的链接地址,这里我贴出我自己的用法。
我将两个类整合到一个.cs文件中了(这里命名为AuthCode.cs),程序如下:using System;using System.Collections.Generic;using ponentModel;using System.Text;using System.Web;using System.Web.UI.WebControls;using System.Web.UI;using System.Web.SessionState;using System.Drawing;using System.IO;namespace AuthCode{[ToolboxData("<{0}:AuthCode runat=server></{0}:AuthCode>")]public class AuthCode : WebControl{///〈summary>///获得验证码的值///〈/summary>///〈returns>验证码〈/returns>public string GetValue(){return HttpContext.Current.Session["value"].ToString();}[Bindable(true)][Category("Appearance")][Description("验证码字符长度")][DefaultValue("ss")][Localizable(true)]//长度internal static int mySize;public int MySize{get { return AuthCode.mySize; }set{AuthCode.mySize = value;}}public AuthCode(): base(HtmlTextWriterTag.Img)//重写父类的构造(输出流的HTML标记){ }protected override void AddAttributesToRender(HtmlTextWriter writer){base.AddAttributesToRender(writer);//将要输出的的HTML标签的属性和样式添加到指定的HtmlTextWriter中writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "pointer");//添加样式writer.AddAttribute("onclick", "this.src='img.jd?id='+Math.random()");//添加jsVerifyImg.jdwriter.AddAttribute(HtmlTextWriterAttribute.Src, "img.jd");writer.AddAttribute("alt", "点击刷新");}}public class AuthCodeHttpHander : IHttpHandler, IRequiresSessionState{///<summary>///返回验证码字符///</summary>///<param name="codeCount">验证码长度</param>///<returns></returns>private string GetRandomNumberString(int codeCount){string strChoice ="2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";string[] strResult = strChoice.Split(new Char[] { ',' });string strReturn = "";Random rnd = new Random();for (int i = 0; i < codeCount; i++){int j = rnd.Next(strResult.Length);//随机数不能大于数组的长度strReturn = strReturn + strResult[j].ToString();}return strReturn;}private Color GetColor(){return Color.Black;}private Bitmap CreateImage(string str_AuthCode){int width = str_AuthCode.Length * 13;int height = 20;Random rad = new Random();Bitmap bmp = new Bitmap(width, height);Graphics grp = Graphics.FromImage(bmp);//在图片上绘制图形grp.Clear(Color.White);//填充bmp的背景色grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框int num = width * height;for (int i = 0; i < num; i+=3)//在图片的指定坐标上画上有颜色的圆点{int x = rad.Next(width);int y = rad.Next(height);int r = rad.Next(255);int g = rad.Next(255);int b = rad.Next(255);Color c = Color.FromArgb(r, g, b);bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点}Font f = new Font("宋体", 12, FontStyle.Bold);//定义字体 Brush br = new SolidBrush(Color.Black);//定义画笔的颜色及字体的颜色for (int i = 0; i < str_AuthCode.Length; i++){string s = str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上Point p = new Point(i * 12 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置(坐标)grp.DrawString(s, f, br, p);//绘制字符串}grp.Dispose();return bmp;//返回}///<summary>///是否可以处理远程的HTTP请求///</summary>public bool IsReusable{get { return true; }}///<summary>///将验证码图片发送给WEB浏览器///</summary>///<param name="context"></param>public void ProcessRequest(HttpContext context){int size = AuthCode.mySize; //Int32.Parse((String)context.Session["Size"]); MemoryStream ms = new MemoryStream(); // 创建内存流(初始长度为0 自动扩充)string NumStr = GetRandomNumberString(size);//获得验证码字符 context.Session.Add("value", NumStr);//将验证码字符保存到session里面 Bitmap theBitmap = CreateImage(NumStr);//获得验证码图片theBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将位图写入内存流context.Response.ClearContent(); //清除缓冲区里的所有内容输出context.Response.ContentType = "image/jpeg"; //需要输出图象信息要修改HTTP头context.Response.BinaryWrite(ms.ToArray()); //将内存流写入HTTP输出流theBitmap.Dispose(); //释放资源ms.Close();//释放资源ms.Dispose();//释放资源context.Response.End();}}}我是这样使用这个验证码控件的:1:修改web.config 文件在<system.web> </system.web>间加入下面的代码:<httpHandlers><add verb="*"path="*.jd"type="AuthCode.AuthCodeHttpHander"/></httpHandlers>2: “开始”—“运行”—“cmd” ,用下面的两条命令编译AuthCode.cs文件为.DLL文件。
(AuthCode.cs文件保存在“C:\WINDOWS\\Framework\v2.0.50727”目录下):cd C:\WINDOWS\\Framework\v2.0.50727csc /target:library AuthCode.cs将得到的DLL文件添加到项目的引用中,在“工具箱”中右键点“选择项...”——在.net 组件中勾选“AuthCode”(如下图),点确定之后工具箱中就会增加一个AuthCode控件。