图片验证码,就是首先造一张空白的图,然后在图片上绘制随机数就可以了,在这里用到了一般处理程序。
一般处理程序就是单纯的页面(无任何标签),是.ashx文件,里面的验证数字利用Session保存,用Response显示在页面上,如果想用的话 直接图片按钮(Image Button)路径到这个页面就可以,, 而里面的验证数字则可以利用Session["name"]来接收。 ↓
↓
↓
img.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
1、下面用代码来介绍一下一般处理程序:
Show.ashx 页面 <%@ WebHandler Language="C#" Class="Show" %> using System; using System.Web; using System.Drawing;//引用绘图命名空间 using System.Web.SessionState;//IRequiresSessionState的命名空间 //一般处理器 public class Show : IHttpHandler, IRequiresSessionState Session的接口,必须得继承,不然没法用session { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "image/jpeg"; //输出类型 为图片类型 //开始造图片, Bitmap img = new Bitmap(50,20); //一张宽度为50,高度为20的空白图片 Graphics gc = Graphics.FromImage(img); //往img图里绘制 Font font = new Font("楷体",12,FontStyle.Bold);//字体格式 SolidBrush brush = new SolidBrush(Color.White);//刷子格式 ,里面的颜色是背景颜色 gc.FillRectangle(brush,0,0,50,20);//绘制的样子 brush.Color = Color.Red;//刷子颜色 //已经绘制完了,往图里扔验证码,开始造验证码 string s = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; string str = ""; Random r = new Random(); //随机出一个数来 for (int i = 0; i < 4; i++) { int x = r.Next(0, 62); string ss = s.Substring(x, 1); //截取字符串 str += ss; } //验证码已经造好了,开始往图片里扔,前提先保存一下验证码的内容,为了以后的使用(输入验证) context.Session["yanzheng"] = str; //往图片里仍 gc.DrawString(str,font,brush,0,0); // 最后将图片保存,通过response响应流保存 img.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); } public bool IsReusable { get { return false; } } }
一般处理程序造好以后,需要来用它,这里是用的图片按钮(ImageBotton)来接收,右键ImageButton ,找到ImageUrl属性,直接选择路径就可以了,在这里的路径是Show.ashx。
既然图片已经显示在页面上了,就需要进行验证。。。 用Session来接收
protected void Button1_Click(object sender, EventArgs e) //注册验证 { string txtyanzheng = TextBox4.Text; if (string.IsNullOrWhiteSpace(txtyanzheng)) { } else { string yanzheng = Session["yanzheng"].ToString(); //用Session传值接收过来 if (txtyanzheng == yanzheng) { Response.Write("<script>alert('注册成功')</script>"); } else { Response.Write("<script>alert('验证码不正确')</script>"); } } }
这样就能实现图片验证码的验证了,下面附效果图:
2、传值:两种方式 Session或Response.Redirect
3、至于最后的点击图片换一下验证码,就是点击一下路径变一下,最后有个id(自己随便起)放不同的数就可以了
ImageButton1.ImageUrl = "show.ashx?id=" + new Random().Next(100).ToString();
点击一下图片按钮,路径变一下,就相当于刷新验证码了