ASP.NET在实际开发中验证码的用法

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

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

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

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

代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Linq;
  5 using System.Web;
  6
  7 namespace vcodeDemo
  8 {
  9     /// <summary>
 10     /// vcode 写法的说明
 11     /// </summary>
 12     public class c01vcode : IHttpHandler,System.Web.SessionState.IRequiresSessionState
 13     //如果要在一般处理程序中能够正常使用session则必须实现IRequiresSessionState接口
 14     {
 15         public void ProcessRequest(HttpContext context)
 16         {
 17             //1 设置ContentType为图片类型
 18             context.Response.ContentType = "image/jpeg";
 19
 20             //2 准备要作画的图片对象,宽度为80 高度为25  ,Bitmap:位图
 21             using (Image img = new Bitmap(80, 25))
 22             {
 23                 // 从img对象上定义画家
 24                 using (Graphics g = Graphics.FromImage(img))
 25                 {
 26                     //以白色来清除位图的背景
 27                     g.Clear(Color.White);
 28
 29                     //画图片的边框为红色,从左上角开始画满整个图片
 30                     g.DrawRectangle(Pens.Red, 0, 0, img.Width - 1, img.Height - 1);
 31
 32                     //在验证码文字前面画50个噪点
 33                     this.DrawPoint(50, g, img.Width, img.Height);
 34
 35                     //得到验证码文本字符串(随机产生4个字符)
 36                     string vcode = this.GetVCode(4);
 37
 38                     //保存验证码文本字符串到session中
 39                     context.Session["vcode"] = vcode;
 40
 41                     //将验证码字符串写入到图片对象上
 42                     g.DrawString(vcode
 43                         , new Font("Arial", 16, FontStyle.Strikeout | FontStyle.Bold) // 给文本加中横线和加粗
 44                         , new SolidBrush(Color.Red)
 45                         , new PointF(r.Next(15), r.Next(8))
 46                         );
 47
 48                     //在验证码文字后面画50个噪点
 49                     this.DrawPoint(50, g, img.Width, img.Height);
 50                 }
 51                 //将验证码输出给浏览器
 52                 img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
 53             }
 54         }
 55
 56         /// <summary>
 57         /// 在图片对象上画噪点
 58         /// </summary>
 59         /// <param name="count"></param>
 60         void DrawPoint(int count, Graphics g, int width, int height)
 61         {
 62             for (int i = 0; i < count; i++)
 63             {
 64                 int x = r.Next(width);
 65                 int y = r.Next(height);
 66
 67                 g.DrawLine(Pens.Blue
 68                     , new Point(x, y)
 69                     , new Point(x + 2, y + 2)
 70                     );
 71             }
 72         }
 73
 74         /// <summary>
 75         /// 定义产生随机数的对象
 76         /// </summary>
 77         Random r = new Random();
 78
 79         /// <summary>
 80         /// 产生验证码文本字符串
 81         /// </summary>
 82         /// <param name="count"></param>
 83         /// <returns></returns>
 84         string GetVCode(int count)
 85         {
 86             //声明返回值
 87             string rescode = "";
 88             string codestr = "ABCDabcd123456789";
 89             char[] codeArr = codestr.ToArray();
 90             for (int i = 0; i < count; i++)
 91             {
 92                 rescode += codeArr[r.Next(codestr.Length)];
 93             }
 94             //返回字符串
 95             return rescode;
 96         }
 97
 98         public bool IsReusable
 99         {
100             get
101             {
102                 return false;
103             }
104         }
105     }
106 }

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

ASP.NET在实际开发中验证码的用法,布布扣,bubuko.com

时间: 2024-08-02 07:03:16

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

Android开发中验证码的生成

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

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

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

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

asp.net mvc结合linq,先不说性能问题,对于增删查改的操作还是相当方便的.以下我们就来介绍一下linq在asp.net mvc的Controller中的常见用法. 1 首先来看看整个数据表,共有3个表,要访问这个数据库,得有一个代理,这个代理就是edmx文件中继承类DbContext的AllTestEntities 2 实体代理,可以直接在Controller中声明,并且数据库中对应的表,可以无缝对接:使用时,声明一个变量db,然后使用时,要访问相应表或视图,可以直接使用db.Dom

asp.net5开发中DNX SDK版本的影响

某次asp.net5开发中遇到了一个很奇怪的问题,引用部分的nuget包没有显示任何错误,如下图: 但是编译时出现了几百个错误: 错误基本都是形如“CS0246 The type or namespace name 'Key' could not be found (are you missing a using directive or an assembly reference?) ”这种错误, 给人的第一感觉就是nuget包引用出了问题,但是不管你怎么检查就是查不出来哪里错了. 更离奇的是

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

整合Spring.net到asp.net网站开发中初探 http://www.veryhuo.com 2009-10-21 烈火网 投递稿件 我有话说 Spring提供了一个轻量级的用于构建企业级的应用程序的解决方案.Spring提供一致并清晰的配置并整合AOP(Aspect-Oriented Programming)至你的软件中.Spring.net最耀眼的功能是在中间层提供声明式事务管理用于构建全功能的ASP.NET框架. Spring.net是一个提供综合的基础结构用于支持企业级.Net开

ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grunt和Gulp都在Visual studio 2015中得到支持.ASP.NET 项目模板默认使用Gulp. Grunt和Gulp Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp performance和优雅的语法受到欢迎.与Grunt不同,Grunt往往在硬盘上是

ASP.NET网站开发中个人出错总结一:数据库连接

上图标记要保持一致.才正确. ASP.NET网站开发中个人出错总结一:数据库连接

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

本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统一的处理风格,将异常信息优雅 地反馈给开发人员和用户.我们都知道,.net的异常处理是按照“异常链”的方式从底层向高层逐层抛出,如果不能尽可能地早判断异常发生的边界并捕获异 常,CLR会自动帮我们处理,但是这样系统的开销是非常大的,所以异常处理的一个重要原则是“早发现早抛出早处理”.但是本文总结的服

asp.net web开发中使用JS百度地图信息弹出窗中显示echarts图

之前在WebGIS开发中,主要是企业级开发,而面向大众级的开发平台,如百度地图等却很少. 最近手头上的一个项目,有一个"电子地图"功能,由于功能需求仅仅是信息查看和浏览,所以选用了百度地图,但是在开发中遇到一个问题,就是信息提示窗口中,要显示折线图,搜索了一大圈也没有这样的示例. 后来思考了一下,由于信息窗口中使用的是html代码,所以可以间接使用iframe来加载一个包含图表数据的页面,最终实现了功能,以下是初步的示例效果,后续还需要UI设计人员进行优化处理. geoc.getLoc