ASP.net 验证码控件(附源代码)
作者:陈粤雄 2009-05-13
前段时间接了个网站做,里面有用到验证码,本着节省时间的想法,上网找了一下相
关的控件,
没想到这样的控件竟然很少,网上找到的大多是类似 asp 那样把一个单独 aspx 页面作为图
片的方式的,
(例如:<img src="code.aspx">)以控件形式写的极少,而且写的很差劲,用处不大。
刚好那几天没什么事,干脆自己写个验证码的控件算了,一来以后可以再次使用,省
去再写的时
间,二来也练下 asp.net 服务器控件的写法,毕竟目前还没写过正式的服务器控件。
控件特点:
1、自动完成客户端服务器的验证码验证,只要直接拖到页面即可自动验证。
2、可自定义验证码图片外观。
3、有数字、小写字母、大写字母三种及任意两种组合、三种组合字符选择。
下面说下这个控件的开发的一点心得,只写思路要点,详细的请看源代码。
要点一:图片的生成处理。
要在 Web 上动态生成一个图片并显示出来,目前常用的做法是把一个页面作为一个图
片,然后在
这个页面上用 HttpResponse.BinaryWrite(byte[] imageBuffer) 的方法输出图像流。
当然,还得指定 ContentType,例如:Response.ContentType = "image/Gif"。
至 于 imageBuffer 的 方 式 最 简 单 的 可 以 用 Bitmap.Save(Stream stream, ImageFormat
format)以及
Stream .ToArray() 方法获得。
至于怎么生成随机符的图片,网上有很多例子,就不多说了。
要点二:处理图片的页面。
图像的输出没问题了,但是去哪里找到这样一个输出的页面呢,当然不能单独做出一
个页面来,这
样做的话那就没什么服务器换件的意义了。
WebControl 这个类下面有个属性 Page,这是指定包含本服务器控件的页面,所以,我
们可以考虑
用这个属性所指定的页面来输出图片。
但是这样问题也来了,既要用这个页面输出整个控件,也要用它输出图片,这样就得
有个判断了,
我们可以用 Request.QueryString 来判断,图片的地址就加个查询字符串,例如: <img
src="?isImage=