基于Session原理的验证码方案

原文转至:http://www.itivy.com/ivy/archive/2011/2/19/634337504473215614.html

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试) 的缩写,是一种区分用户是计算机和人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破 解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功 能。目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰,例如随机画数条直线,画一些点(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功 能。

今天我们一起来实现一个基于Session原理的验证码方案,基本步骤是这样的:用户打开页面 --> 在服务器端用随机字母和数字生成图片,并对图片进行扭曲、渲染等操作 --> 将刚才图片的字符存入服务器Session --> 用户提交数据之前比较用户输入的验证码和服务器端保存的验证码 --> 成功后清空服务器端保存在Session中的验证码

随机生成字符图片类的代码如下:

为了向页面生成图片,我们新建一个ASP.NET一般处理程序ImageHandler.ashx,其代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.SessionState;
  
namespace verifycode_session
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class ImageHandler : IHttpHandler, IRequiresSessionState
    {
  
        public void ProcessRequest(HttpContext context)
        {
            string actionStr = context.Request["action"] == null ? string.Empty : context.Request["action"].ToLower();
            actionStr = actionStr.Split(new char[] { '?' })[0];
            if (actionStr == "getverifycode")   //getVerifyCode
            {
                VerifyCode v = new VerifyCode();
                string code = v.CreateVerifyCode();                //取随机码
                v.CreateImageOnPage(code, context);        // 输出图片
                context.Session.Remove("VERIFY_CODE");
                context.Session.Add("VERIFY_CODE", code.ToString());
            }
  
        }
  
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
最后我们把它输出在html页面上,并点击链接或图片可以换一张验证码图片,html代码如下:
1
2
3
4
5
6
7
8
<body>
    <div>
        <img src="/ImageHandler.ashx?action=getVerifyCode" onclick="this.src=this.src+'?'"
            alt="看不清换一张" id="VerfifyCodeImg" />
        <a href="javascript:void(0)" onclick="$('#VerfifyCodeImg').attr('src',$('#VerfifyCodeImg').attr('src')+'?')">
            看不清楚换一张</a>
    </div>
</body>
这里下载整个程序的demo

posted @   sxwgf  阅读(843)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示