黑马程序员_学习笔记15_asp.net之验证码实现原理初探
来源:互联网 发布:西安网络招聘信息 编辑:程序博客网 时间:2024/05/16 01:50
验证码这个功能的出现是为了 防止暴力机器人 不断的象网站提交注册或登陆,以及发帖信息。
因为 不对用户能够访问到服务器内存(也就是后台处理代码)的路径加以限制的话,那么暴力机器人的这种行为很有可能导致
服务器内存溢出,最终导致服务器崩溃。这对任何一个网站开发人员来说,是必须严厉禁止的问题。验证码的出现就防止了
这类问题的产生。
在ASP.NET中 ,动态的穿件验证码一般都是使用一般处理文件的模式。
在一般处理文件里动态生成随机数,或者是生成别的什么东西之后,使用一个session保存
当前生成的值,然后在使用.NET提供的Drawing工具动态的生成图片的形式,将动态
生成的验证法,发送到客户端。
当客户端用户提交表单之后,会根据用户提交过来的验证码和存放在session中的验证码进行对比,
来判断用户输入的验证码是否正确。
因为一般处理文件,不是归属于asp.net框架技术下的,所以 它不能直接的使用ASP.NET框架直接为
我们提供的session功能,不过ASP.NET也想到了这一点。你只需要将你的当前托管类除了实现IHttphandler
接口以外,在实现一个在System.Web.SessionState控件下的IRequiresSessionState接口就行了。
IRequiresSessionState接口是一个没有定义任何接口成员的接口,它提供了 在一般处理文件中也能
使用ASP.NET框架中Session的功能。
下面我们来做个验证码的例子:
首先是一般处理文件:yzm.ashx
public class yzm:IHttpHandler,System.Web.SessionState.IRequiresSessionState
{
//我们在这里使用文字版的验证码
string[ ] yzms ={"太极无极","两仪化形","三才化生","四象轮回","五行方尽","六合独尊","七星拱瑞","八卦洞穴","九转归一"};
//然后在使用System.Drawing命名空间下的各种画图功能来将文字内容画到画板上
//假定我已经引入了Drawing命名空间
public void ProcessRequest (HttpContext context) {
//响应格式设置成image/jpeg
context.Response.ContentType = "image/jpeg";
using(BItMap bitmap = new Bitmap(180,50))
{
using(Graphics grap = Graphics.FromImage(bitmap))
{
Random rand = new Random();
int i = rand.Next(yzms.Length);
//将当前验证码的实际内容存放在session中
HttpContext.Current.Session["yzm"] = yzms[i];
grap.DrawString(yzms[i], new Font("宋体", 30), Brushes.Green, new PointF(0, 0));
grap.DrawEllipse(new Pen(Brushes.Honeydew),new Rectangle(20,20,10,10));
//把当前图片绑定到响应流中
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
}
然后在到aspx页面中使用session来判断用户输入的验证码是否正确:
文件名:测试验证码.aspx
这是前面的html标签,使用一个img 来象YZM一般处理文件请求一张验证码图片。
这是后台代码
使用Session["yzm"]来取得服务器为当前用户在一般处理文件里随即到的成语,
然后和用户输入的成语进行对比,正确就给正确提示,失败就给失败提示。
运行该页面:
当输入正确时:
当输出错误时:
这样一个验证码完整的例子就做出来了。
如果你想能够自己彻底的做出这么一个效果出来,那么必须要对cookie和session非常了解才行。
详细请查看:http://net.itheima.com/
- 黑马程序员_学习笔记15_asp.net之验证码实现原理初探
- 黑马程序员_学习笔记10_asp.net初探之一般处理文件模型
- 黑马程序员_学习笔记13_asp.net之Session原理解析
- 黑马程序员_学习笔记14_asp.net之Cookie原理解析
- 黑马程序员_学习日记11_asp.net初探之视图状态
- 黑马程序员_ASP.NET初探
- 黑马程序员_学习日记26_ASP.NET使用验证控件
- 黑马程序员_学习日记20_ASP.Net初级
- 黑马程序员_学习日记21_ASP.Net中级
- 黑马程序员_学习笔记23_ASP.NET中aspx 和 aspx.cs之间的关系
- 黑马程序员_Asp.net缓存学习总结
- 黑马程序员_学习日记27_ASP.NET使用Rich控件
- 黑马程序员_学习日记9_ASP.NET服务器处理过程_一般处理程序_复习HTML标签
- 黑马程序员之 ASP.NET学习笔记:JS验证大全
- 黑马程序员_学习笔记16_Http协议初探
- 黑马程序员_学习日记15_ADO.Net之DataSet
- 黑马程序员_asp.net mvc 路由
- 黑马程序员_Asp.Net防盗链
- WinPhone7使用调用WCF传递对象
- 听说爱
- 第八周实验报告3
- android布局中的一些记录
- PHP中pdo与adodb之比较
- 黑马程序员_学习笔记15_asp.net之验证码实现原理初探
- library cache pin/lock
- 关于findbugs插件配置
- svm的smo算法
- AS3 VerticalScroller ---- 垂直滚动条,在水平滚动条的基础上,使用10分钟左右完成了
- The last packet successfully received from the server was XXX seconds ago
- MFC 数据库绑定操作 提示无效的参数类型错误,搞死了。。。。终于搞定了
- Twitter 将其使用的 MySQL 开源
- linkedList 源码解析