在网上有看到很多关于验证码的代码,很多都只是生成一张验证码图片,然而在实际登陆验证模块,验证码要怎么添加进去或者说怎么运用、和实际项目开发中要怎么使用验证码,我自己总结了几点。

一、在实际开发登陆模块的验证码,程序员是将验证码的文本值(字符串)存在Session中的,然后在登陆验证的时候,通过Session取值进行判断的,这样效率会高很多。

二、然而在写验证码的时候要想通过Session存值,就必须实现System.Web.SessionState.IRequiresSessionState这个接口

三、以一般处理程序(ashx页面)为列,下面对验证码写法和运用进行详解

代码:

 using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web; namespace vcodeDemo
{
/// <summary>
/// vcode 写法的说明
/// </summary>
public class c01vcode : IHttpHandler,System.Web.SessionState.IRequiresSessionState
//如果要在一般处理程序中能够正常使用session则必须实现IRequiresSessionState接口
{
public void ProcessRequest(HttpContext context)
{
//1 设置ContentType为图片类型
context.Response.ContentType = "image/jpeg"; //2 准备要作画的图片对象,宽度为80 高度为25 ,Bitmap:位图
using (Image img = new Bitmap(, ))
{
// 从img对象上定义画家
using (Graphics g = Graphics.FromImage(img))
{
//以白色来清除位图的背景
g.Clear(Color.White); //画图片的边框为红色,从左上角开始画满整个图片
g.DrawRectangle(Pens.Red, , , img.Width - , img.Height - ); //在验证码文字前面画50个噪点
this.DrawPoint(, g, img.Width, img.Height); //得到验证码文本字符串(随机产生4个字符)
string vcode = this.GetVCode(); //保存验证码文本字符串到session中
context.Session["vcode"] = vcode; //将验证码字符串写入到图片对象上
g.DrawString(vcode
, new Font("Arial", , FontStyle.Strikeout | FontStyle.Bold) // 给文本加中横线和加粗
, new SolidBrush(Color.Red)
, new PointF(r.Next(), r.Next())
); //在验证码文字后面画50个噪点
this.DrawPoint(, g, img.Width, img.Height);
}
//将验证码输出给浏览器
img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
} /// <summary>
/// 在图片对象上画噪点
/// </summary>
/// <param name="count"></param>
void DrawPoint(int count, Graphics g, int width, int height)
{
for (int i = ; i < count; i++)
{
int x = r.Next(width);
int y = r.Next(height); g.DrawLine(Pens.Blue
, new Point(x, y)
, new Point(x + , y + )
);
}
} /// <summary>
/// 定义产生随机数的对象
/// </summary>
Random r = new Random(); /// <summary>
/// 产生验证码文本字符串
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
string GetVCode(int count)
{
//声明返回值
string rescode = "";
string codestr = "ABCDabcd123456789";
char[] codeArr = codestr.ToArray();
for (int i = ; i < count; i++)
{
rescode += codeArr[r.Next(codestr.Length)];
}
//返回字符串
return rescode;
} public bool IsReusable
{
get
{
return false;
}
}
}
}

四、在验证登陆判断的时候,因为我们通过上下文对象的Session给验证码文本赋值并存入Session中去: context.Session["vcode"] = vcode;所有在进行验证的时候可以使用Session["vcode"]进行取值,然后进行判断。

ASP.NET在实际开发中验证码的用法的更多相关文章

  1. Android开发中验证码的生成

    近期在做电商金融类的项目,验证码的生成方法不可缺少.先学习了一种.经过測试好用.从别处学习的代码,稍修改了一下可选择是否支持识别大写和小写.直接上代码. import android.app.Acti ...

  2. asp.net core-项目开发中问题汇总

    无法启动进程\Program File\dotnet\dotnet.exe.进程创建失败,出现错误:系统找不到指定的文件如下图: 解放方案:1.修改系统环境变量 2.重启电脑

  3. Android开发中Chronometer的用法

    Chronometer集成自TextView,里面有个Handler负责定时更新ui. 其计时原理很简单:通过setBase(long t)方法设置好baseTime之后,当start()时,每隔一秒 ...

  4. 走入asp.net mvc不归路:[6]linq常见用法

    asp.net mvc结合linq,先不说性能问题,对于增删查改的操作还是相当方便的.以下我们就来介绍一下linq在asp.net mvc的Controller中的常见用法. 1 首先来看看整个数据表 ...

  5. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  6. asp.net开发中常见公共捕获异常方式总结(附源码)

    本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...

  7. ASP.NET网站开发中的配置文件

    来源:微信公众号CodeL 1.配置文件层次分类 Machine.config:  对.netframework整体的配置 web.config(framework目录下):  对所有项目所公有的应用 ...

  8. ASP.NET Web Froms开发模式中实现程序集的延迟加载

    延迟加载是一个很大的诱惑,可以达到一些比较好的效果,比如: 1.在实体框架中,由于关联数据的数量和使用时机是不确定的,通过延迟加载,仅在使用的时候去执行关联数据的查询操作,减少无谓的数据查询操作,可以 ...

  9. 整合Spring.net到asp.net网站开发中初探

    整合Spring.net到asp.net网站开发中初探 http://www.veryhuo.com 2009-10-21 烈火网 投递稿件 我有话说   Spring提供了一个轻量级的用于构建企业级 ...

随机推荐

  1. asp.net在后台弹出confirm确认对话框并获取用户选择的值做出相应的操作

    在asp项目中,这种情况是经常出现的,前段时间通过查找资料以及自己尝试,找到一种解决方案,但是不知是否有更好的方案,以后发现再进行记录. 一.思路 在本次项目中,在一个函数中需要让用户判断,并根据用户 ...

  2. 关于object在使用上的问题

    关于object在使用上的问题 1.直接调用标签<object>中的单击事件 <object>是含有onclick和ondblclick两个事件的.按照以往方式,直接在里面调用 ...

  3. js基础-需要注意的地方

    ---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...

  4. 数据存储: sqlite,coredata plist 归档

    sql 语句  结构化查询语言 通用数据库操作语言1.创建数据库create database 1407EDB2.删除数据库drop database 1407EDB3.备份use master ex ...

  5. Spring mvc中@RequestMapping 6个基本用法整理

    继续整理,这个是前段时间用jsp开发的一个站点,说起来php程序员去做jsp程序确实有些小不适应,但是弄完后绝对对于这种强类型语言而比收获还是颇多的. 1,最基本的,方法级别上应用 @RequestM ...

  6. Spark2.0编译

    Spark2.0编译 1 前言 Spark2.0正式版于今天正式发布,本文基于CDH5.0.2的Spark编译. 2 编译步骤 #2.1 下载源码 wget https://github.com/ap ...

  7. QTestlib Manual翻译

    Trolltech公司提供的QTestlib框架,是一种针对基于QT编写的程序或库的单元测试工具.QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 目录: QtestL ...

  8. 我的django之旅(一)

    我的django之旅(一) 标签(空格分隔):django web 1.检验我们的python和django版本 liao@spring ~ $ python --version Python 2.7 ...

  9. Javascript经典实例 - 正则表达式

    1] 正则常用字符 正则表达式常用的特殊字符 字符 匹配 示例 ^ 匹配输入的开始 /^This/匹配 “This is ...” $ 匹配输入的结束 /end$/匹配“This is the end ...

  10. 用PHP向MySql中写入图片

    我们经常遇到的问题是如何将图片文件放到Mysql数据库当中,这样可以避免没有认证的用户找到我们的图片资源! 1.看看数据库里的表结构怎么写 CREATE TABLE Images (     PicN ...