在ASP.NET中使用一般处理程序生成验证码
如果期望一般处理程序(ashx)处理Session,必须实现【System.Web.SessionState】命名空间下的【IRequiresSessionState】接口。
asp.net中的验证码一般是通过请求ashx页面来完成的,将ashx的上下文对象的响应类型设置为"image/jpeg".使用Random类是随机生成一个字符串,把这个字符串写入到一张图片并保存到Session中,再将图片保存到响应流的输出中,这样每次客户端就会请求到一个验证码的图片了。
下面是我的具体实现:
客户端
把验证码图片的src属性指向ashx验证码处理程序的路径,点击图片或"看不清"实现换图的功能是通过改变验证码图片的src属性实现。在每次更换验证码时,为了避免缓存而未发出请求,需要在src属性的URL末尾加个不固定的参数,如:this.src="getValidateCode.ashx?t="+new Date();因为浏览器处理相同的请求的时候是优先从缓存中读取的,这样浏览器会为每次请求都发送请求,而不是从缓存中读取。
服务器端
生成随机码的方法:
private string getValidateCode(int validateCodeLength)
{
// 定义可能出现的所有字符串,实际应用中有些字符很难区分,如0和o,可以去掉。
string allChars = @"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 获取所有字符的长度
int charsLength = allChars.Length;
string validateCode = string.Empty;
// 声明随机数生成器
Random ran = new Random();
//循环的次数代表生成的随机字符串的长度
for (int i = ; i < validateCodeLength; i++)
{
//将随机产生的数字作为字符串的索引,从而可以获得其下标所在的字符,并将这个字符加到随机字符串上
validateCode += allChars[ran.Next(charsLength)];
}
//返回字符串
return validateCode;
}
ashx中的处理过程
public void ProcessRequest(HttpContext context)
{
//将响应类型设置成图片
context.Response.ContentType = "image/jpeg";
//获取一个4位数的验证码
string validateCode = getValidateCode();
//把验证码写入Session
context.Session["validateCode"] = validateCode;
//创建验证码图片
using (Bitmap img = new Bitmap(, ))
{
//获取背景验证码的背景图片路径
string bgPath = context.Server.MapPath("~/image/bg.gif");
using (Bitmap bg = new Bitmap(bgPath))
{
using (Graphics g = Graphics.FromImage(img))
{
//使用背景图片画刷填充验证码图片
g.FillRectangle(new TextureBrush(bg), , , img.Width, img.Height);
//将验证码字符串写入图片
g.DrawString(validateCode, new Font("微软雅黑", , FontStyle.Italic), Brushes.Black, , );
//将验证码图片保存至响应流,客户端就能看到这个图片了
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}
}
}
在ASP.NET中使用一般处理程序生成验证码的更多相关文章
- asp.net中的比较完美的验证码
要实现如图的效果的验证码,分以下步骤: 第一.布局好调用验证码的登录页面(命名:Login.aspx),注意:验证码位置可以是服务器控件 Image,也可以是html标签写的<img>,但 ...
- asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception Sys ...
- ASP.NET中常用的优化性能的方法
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...
- ASP.NET中Session的sessionState 4种mode模式
1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. ...
- Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值
Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值,去属性表中设置这时候会提示你去属性表中更改返回类型. 其实存储过程返回的也是一张表,只不过有时候存储过程有点复杂或者写法不规范的话不能 ...
- ASP.NET中后台数据和前台控件的绑定
关于ASP.NET中后台数据库和前台的数据控件的绑定问题 最近一直在学习个知识点,自己创建了SQL Server数据库表,想在ASP.NET中连接数据库,并把数据库中的数据显示在前台,注意,这里的数据 ...
- asp.net中缓存的使用介绍一
asp.net中缓存的使用介绍一 介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管理,有的提到的c ...
- ASP.NET中Ajax的用法
在ASP.NET中应用Ajax的格式如下: 前台代码(用JQuery库) $.ajax({ type: "POST", async: true, url: "../Aja ...
- Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)
有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...
随机推荐
- MLlib-聚类
聚类 例子 流聚类 例子 聚类 MLlib支持k-means聚类,一种最常用的聚类方法,将数据点聚成指定数据的簇.MLlib实现了一种k-means++的并行变种,叫做kmeansII.MLlib的实 ...
- windows10 预览版 中英文官方下载地址+激活密钥+网盘分享
windows10 预览版 中英文官方下载地址+激活密钥+网盘分享 产品密钥:NKJFK-GPHP7-G8C3J-P6JXR-HQRJR 英语 64 位 (x64) http://iso.esd.m ...
- could only be replicated to 0 nodes, instead of 1
周末机房断电,然后hadoop爆出如题的错误,解决方案就是关闭所有节点的防火墙,相关命令如下: 查看防火墙状态: /etc/init.d/iptables status 暂时关闭防火墙: /etc/i ...
- zoj 3758 Singles' Day
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5203 题意:有n个1然后按照b进制转化为10进制数,判断这个数是不是素数. # ...
- 学习Cassandra资料的一些整理
Cassandra note: 依赖:需要java 8 (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 数据模 ...
- POJSorting It All Out (拓扑)
题目链接. 题目大意: 给定一定的数量的小于关系: 1.如果发现环,输出从前几次就可以确定出现环 2.如果能够确定唯一序列,输出. 3.如果通过全部关系,还不能确定序列,则输出不能确定. 分析: 个人 ...
- POJ1836 Alignment(LIS)
题目链接. 分析: 从左向右求一遍LIS,再从右向左求一遍LIS,最后一综合,就OK了. 注意: 有一种特殊情况(详见discuss): 8 3 4 5 1 2 5 4 3 答案是:2 AC代码如下: ...
- -_-#【Canvas】回弹
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- white-space norma nowrap强制同一行内显示所有文本文字,让所有文字内容中一排显示不换行
日常我们为了让文字内容在一行内显示完,哪怕宽度不够也不能换行,我们可以使用white-space样式,但如果遇到了html br强制换行标签,无论是设置white-space与否都会被<br&g ...
- app开发历程——android手机显示服务器端图片思路
以前自己都不知道怎么去显示服务器端的图片,还好在apkbus论坛上找到一个特别简单的例子.虽然一天天忙忙碌碌,但是自己内心其实有一种想逃的心里,说不定哪天就会冒出来. 1.首先服务器端图片 这里的Im ...