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提供了一个轻量级的用于构建企业级 ...
随机推荐
- date命令小结
date命令是查看日期时间的常用命令,date MMDDhhmmYY.ss(修改顺序)用来更改时间 linux时间分为系统时间和硬件时间, [root@www doc]# clock--------- ...
- gradient杂谈
工作中难免遇到某些小项目中没有设计的情况,这对于PS基础薄弱的我来说非常恐怖.无奈之下,只好自己自学UI方面的知识,但对于某些能用CSS实现的背景样式等,还是尽可能地用已经掌握的知识去实现.本文主要分 ...
- mvc分页生成静态页,mvc生成静态页
http://blog.csdn.net/xxj_jing/article/details/7899125 分页生成静态页 http://www.cnblogs.com/luanyilin/archi ...
- HTTPS那些事(一) HTTPS原理
谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传输的一些情况,从回复来看,争议还是有的.随着网络越来越普及,应用越来越广泛,一 ...
- Webfrom 上传 单个上传 多个上传
文件上传控件:FileUpload - 控件,界面+方法+属性Button/LinkButton/ImageButton FileUpload控件:1.SaveAs("要上传到服务器的绝对路 ...
- (转) Java程序员应该知道的10个调试技巧
原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺 ...
- python单元测试--深入理解unittest
单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nos ...
- FloatingActionButton 完全解析[Design Support Library(2)]
一.简单使用 布局: <android.support.design.widget.FloatingActionButton android:layout_width="wrap_co ...
- 【Ecstore2.0】第三方信任登陆问题解决_备忘
ECSTORE2.0的信任登陆模块开启后,需要拿着授过权的ID在官网进行配置才可以使用,但是客户的授权证书一时无法使用,而跳过认证的话功能又用不了,所以就自己临时搭了一个测试用的认证服务器和信任登陆平 ...
- haproxy之配置文件解析
功能--> 提供高可用/负载均衡/基于tcp和http应用的代理;支持虚拟主机,特别适用于负载特大的web站点. 配置文件解析--> #配置文件-->开启/proc/net/ipv4 ...