自定义“验证码”控件

“验证码”在登录的时候,经常用到,如果把“她”封装成控件,是不是很爽呢?但是,我一般不喜欢封装得太厉害的“她”,因为什么都看不到,亦或看起来比较朦胧:)    切入点    利用IHttpHandler接口,动态生成验证码       图一(直接看效果吧)          看代码吧       步骤一(新建一类库)          Code    using System;    using System.Collections.Generic;    using System.Text;    using System.Web;       using System.Web.SessionState;    using System.Web.UI;    using System.Drawing;       namespace ControlValidater    {    public class CValidater:IHttpHandler,IRequiresSessionState    {    HttpResponse response = null;    HttpSessionState sessionState = null;       public void ProcessRequest(HttpContext context)    {    response = context.Response;    sessionState = context.Session;       this.GenImg(this.GenCode(4));    }       bool System.Web.IHttpHandler.IsReusable    {    get { return true; }    }       //产生随机字符串    private string GenCode(int num)    {    string[] source ={"0","1","2","3","4","5","6","7","8","9",    "A","B","C","D","E","F","G","H","I","J","K","L","M","N",    "O","P","Q","R","S","T","U","V","W","X","Y","Z"};    string code = "";    Random rd = new Random();    for (int i = 0; i < num; i++)    {    code += source[rd.Next(0, source.Length)];    }    return code;    }       //生成图片    private void GenImg(string code)    {    Bitmap myPalette = new Bitmap(60, 20);//定义一个画板       Graphics gh = Graphics.FromImage(myPalette);//在画板上定义绘图的实例       Rectangle rc = new Rectangle(0, 0, 60, 20);//定义一个矩形       gh.FillRectangle(new SolidBrush(Color.Silver), rc);//填充矩形       gh.DrawString(code, new Font("宋体", 16), new SolidBrush(Color.Gray), rc);//在矩形内画出字符串       myPalette.Save(response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);//将图片显示出来       sessionState["ValidateCode"] = code;//将字符串保存到Session中,以便需要时进行验证       gh.Dispose();    myPalette.Dispose();    }    }    }          步骤二(使用方法)    直接引用编译后的dll文件    在web.config的web节点,加入<httpHandlers>元素,    例如          Code    <httpHandlers>       <add path="CValidater.aspx" verb="*" type="ControlValidater.CValidater" />    </httpHandlers>    当然,如果直接把类库作为一个普通类,放在使用的Website的App_Data目录的话,就不需要配置了:)       步骤三(使用方法)    在需要使用验证码的页面,扔一个image标记,然后把他的url指向"类名.aspx"    例如    Code    <asp:Image ID="Image1" runat="server" ImageUrl="~/CValidater.aspx"/>    到此配置完成,是不是很简单呢:)    哎...    还是把最后一个步骤代码贴出来吧.    Code    protected void Button1_Click(object sender, EventArgs e)    {    string strIn = this.TextBox1.Text;    string strSess = Session["ValidateCode"].ToString();    if (strIn == strSess)    Button1.Text = "ok";    else    Button1.Text = "error";    }    需要注意的几个地方:)    一,记得要实现IRequiresSessionState接口,虽然她只是一个标记,没有她,Session状态无法使用.    二,HttpSessionState的对象是通过上下文获得的.    三,配制config的时候,不要忘记path="CValidater.aspx",如果path="*.aspx",那你所有的页面都将被CValidater处理,这不是我们所要的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值