转:http://www.cnblogs.com/wmj/archive/2008/04/17/1158662.html

主题 
雕虫小技--自定义“验证码”控件

“验证码”在登录的时候,经常用到,如果把“她”封装成控件,是不是很爽呢? 但是,我一般不喜欢封装得太厉害的“她”,因为什么都看不到,亦或看起来比较朦胧:)

切入点
利用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处理,这不是我们所要的.

最后
什么也不说了,如果觉得对您有用,请给点鼓励...

转载于:https://www.cnblogs.com/jannock/archive/2008/04/18/1159613.html

雕虫小技--验证码控件相关推荐

  1. [ASP.NET 控件实作 Day28] 图形验证码控件

    在网页上常把图形验证码应用在登入或贴文的页面中,因为图形验证码具有机器不易识别的特性,可以防止机器人程序恶意的存取网页.在本文中将实作一个图形验证码的服务器控件,透过简单的属性设定就可以轻易地在网页上 ...

  2. ux.form.field.Verify 验证码控件

    1 //验证码控件 2 Ext.define('ux.form.field.Verify', { 3 extend: 'Ext.container.Container', 4 alias: ['wid ...

  3. .NET下的验证码控件John.Controls.ValidateCode2V for .NET beta1

    预告下一个作品是选项卡John.Controls.TabularMultiView for .NET(难产ing,由于最近要处理的事情很多,身体上也有点不支,发布时间推迟) 注册了帐号好几久,都没发过 ...

  4. Android拼图滑块验证码控件

    大咖好,博主毕业工作半年多了.今天给大噶呈献博主博客处女作--Android拼图滑块验证码控件.由于初写博客,很多地方可能不够好,望各位多多给点意见.工作半年才送出第一篇博客很惭愧555. 概述 验证 ...

  5. Android 滑动拼图验证码控件

    Android 滑动拼图验证码控件 简介: 很多软件为了安全防止恶意攻击,会在登录/注册时进行人机验证,常见的人机验证方式有:谷歌点击复选框进行验证,输入验证码验证,短信验证码,语音验证,文字按顺序选 ...

  6. 小视频app源码,Android 滑动拼图验证码控件

    小视频app源码,Android 滑动拼图验证码控件 代码实现: 滑块视图类:SlideImageView.java.实现小视频APP源码随机选取拼图位置,对拼图位置进行验证等功能. public c ...

  7. ASP.NET下英文及中文汉字的验证码控件

    本文转自http://bbs.msproject.cn/Default.aspx?g=posts&t=660 翻译 Nataraj K. 著Image Verifier - Custom Co ...

  8. 拆轮子系列之教你一步步写验证码控件

    拆轮子系列之教你一步步写验证码控件 前言 先看看效果 怎么样不错吧?别急下面我就一步一步的教你实现. 用到的知识点总结: 1.Canvas和pint的使用,我们用它画点,线,字 2.View的基本用法 ...

  9. Android滑块拼图验证码控件

    转自  王小冉的文章:https://blog.csdn.net/w690333243/article/details/90311187 https://github.com/luozhanming/ ...

最新文章

  1. 【网络协议】TCP分段与IP分片
  2. 4个重要的量子理论实验综述
  3. IT人士在职场中需要哪些Skill?
  4. AliOS Things蓝牙协议栈及应用开发框架介绍
  5. SVG 入门——理解viewport,viewbox,preserveAspectRatio
  6. mocha.js 生成覆盖率报告
  7. android缩放动画后,Android ObjectAnimator:缩放后动画填充
  8. 特征选择与特征提取(降维)
  9. ProcessBuilder 创建操作系统进程
  10. 蓝海灵豚医疗器械管理隐形眼镜专版用户指南5.9.0.0
  11. windows快捷键之预览窗格
  12. 超大图片(4000×3000像素)的畸变矫正,python+OpenCV实现
  13. cad剖切线的快捷键_Auto CAD2016剖面线快捷键是什么呢??
  14. 生产库,查询库和测试库的区别
  15. 加州大学圣克鲁兹分校计算机科学专业,加州大学圣克鲁兹分校排名
  16. Unity编码解析以及常用转换
  17. 基于飞桨实现高精度岩相自动分析,助力油气田勘探开发设计
  18. jndi weblogic mysql_WebLogic配置JNDI数据源
  19. Django Iframe +Form 上传图片文件等 前端显示
  20. Pytorch打怪路(三)Pytorch创建自己的数据集2

热门文章

  1. tuple在python中什么意思_python tuple什么意思
  2. stc和sac_AVC SMC SAC的关系
  3. 深度学习中padding的作用
  4. 乡村设计改造能让山村营收增50倍
  5. 曾经无话不谈的好朋友,如今怎么见个面都难
  6. 盼望Ubuntu 9.10(RC)发布,彻夜未眠
  7. Intel MPK介绍
  8. 简易iframe-前端web网页设计(iframe标签运用)
  9. echarts实现饼图及横向柱状图的绘制
  10. 关于CAS的TGT和Service Ticket的过期策略