ASP.NET在实际开发中验证码的用法
在网上有看到很多关于验证码的代码,很多都只是生成一张验证码图片,然而在实际登陆验证模块,验证码要怎么添加进去或者说怎么运用、和实际项目开发中要怎么使用验证码,我自己总结了几点。
一、在实际开发登陆模块的验证码,程序员是将验证码的文本值(字符串)存在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在实际开发中验证码的用法的更多相关文章
- Android开发中验证码的生成
近期在做电商金融类的项目,验证码的生成方法不可缺少.先学习了一种.经过測试好用.从别处学习的代码,稍修改了一下可选择是否支持识别大写和小写.直接上代码. import android.app.Acti ...
- asp.net core-项目开发中问题汇总
无法启动进程\Program File\dotnet\dotnet.exe.进程创建失败,出现错误:系统找不到指定的文件如下图: 解放方案:1.修改系统环境变量 2.重启电脑
- Android开发中Chronometer的用法
Chronometer集成自TextView,里面有个Handler负责定时更新ui. 其计时原理很简单:通过setBase(long t)方法设置好baseTime之后,当start()时,每隔一秒 ...
- 走入asp.net mvc不归路:[6]linq常见用法
asp.net mvc结合linq,先不说性能问题,对于增删查改的操作还是相当方便的.以下我们就来介绍一下linq在asp.net mvc的Controller中的常见用法. 1 首先来看看整个数据表 ...
- ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证
ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...
- asp.net开发中常见公共捕获异常方式总结(附源码)
本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...
- ASP.NET网站开发中的配置文件
来源:微信公众号CodeL 1.配置文件层次分类 Machine.config: 对.netframework整体的配置 web.config(framework目录下): 对所有项目所公有的应用 ...
- ASP.NET Web Froms开发模式中实现程序集的延迟加载
延迟加载是一个很大的诱惑,可以达到一些比较好的效果,比如: 1.在实体框架中,由于关联数据的数量和使用时机是不确定的,通过延迟加载,仅在使用的时候去执行关联数据的查询操作,减少无谓的数据查询操作,可以 ...
- 整合Spring.net到asp.net网站开发中初探
整合Spring.net到asp.net网站开发中初探 http://www.veryhuo.com 2009-10-21 烈火网 投递稿件 我有话说 Spring提供了一个轻量级的用于构建企业级 ...
随机推荐
- [汇编学习笔记][第十章 CALL和RET指令]
第十章 CALL和RET指令 call和ret指令都是转移指令,它们都修改CS和IP.经常被共同用于实现子程序的设计.这一章,我们讲解call和ret指令的原理 10.1 ret和retf ret指令 ...
- C#/.NET笔试题
1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 private : 私有成员, 在类的内部才可以访问. ...
- UINavigationController 导航控制器
一.导航视图控制器 1.管理视图控制器 2.控制视图控制器之间的跳转 3.是以压栈和出栈的形式来管理视图控制器 4.导航视图控制器必须要设置根视图控制器 5.导航是视图控制器包含UINavigatio ...
- 利用@media实现IE hack
虽然对IE深恶痛绝,却不能拒绝. 使用@media实现IE hack的方法,以记之. 仅IE6和IE7识别@media screen\9 { .selector { property: value; ...
- (原)error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5577534.html 在debug下使用intel的mkl库时(release下无此问题),莫名的出现 ...
- js数组小结
1.js数组使用sort()排序 var a = ["1","12","3","4","0"]; d ...
- java使用dom4j和XPath解析XML与.net 操作XML小结
最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...
- java的LinkedList的用法
http://blog.chinabyte.com/blog.php?do-showone-uid-135325-itemid-454704-type-blog.html 总结下,LinkedList ...
- 论docker中 CMD 与 ENTRYPOINT 的区别
Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...
- js 创建对象
1.工厂模式 function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.j ...