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提供了一个轻量级的用于构建企业级 ...
随机推荐
- asp.net在后台弹出confirm确认对话框并获取用户选择的值做出相应的操作
在asp项目中,这种情况是经常出现的,前段时间通过查找资料以及自己尝试,找到一种解决方案,但是不知是否有更好的方案,以后发现再进行记录. 一.思路 在本次项目中,在一个函数中需要让用户判断,并根据用户 ...
- 关于object在使用上的问题
关于object在使用上的问题 1.直接调用标签<object>中的单击事件 <object>是含有onclick和ondblclick两个事件的.按照以往方式,直接在里面调用 ...
- js基础-需要注意的地方
---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...
- 数据存储: sqlite,coredata plist 归档
sql 语句 结构化查询语言 通用数据库操作语言1.创建数据库create database 1407EDB2.删除数据库drop database 1407EDB3.备份use master ex ...
- Spring mvc中@RequestMapping 6个基本用法整理
继续整理,这个是前段时间用jsp开发的一个站点,说起来php程序员去做jsp程序确实有些小不适应,但是弄完后绝对对于这种强类型语言而比收获还是颇多的. 1,最基本的,方法级别上应用 @RequestM ...
- Spark2.0编译
Spark2.0编译 1 前言 Spark2.0正式版于今天正式发布,本文基于CDH5.0.2的Spark编译. 2 编译步骤 #2.1 下载源码 wget https://github.com/ap ...
- QTestlib Manual翻译
Trolltech公司提供的QTestlib框架,是一种针对基于QT编写的程序或库的单元测试工具.QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 目录: QtestL ...
- 我的django之旅(一)
我的django之旅(一) 标签(空格分隔):django web 1.检验我们的python和django版本 liao@spring ~ $ python --version Python 2.7 ...
- Javascript经典实例 - 正则表达式
1] 正则常用字符 正则表达式常用的特殊字符 字符 匹配 示例 ^ 匹配输入的开始 /^This/匹配 “This is ...” $ 匹配输入的结束 /end$/匹配“This is the end ...
- 用PHP向MySql中写入图片
我们经常遇到的问题是如何将图片文件放到Mysql数据库当中,这样可以避免没有认证的用户找到我们的图片资源! 1.看看数据库里的表结构怎么写 CREATE TABLE Images ( PicN ...