`
胡火云
  • 浏览: 44496 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Asp.net验证码-转载

 
阅读更多
验证码技术是为了防止暴力破解等而设定的。现在一般的网站注册等都提供验证码功能,特别是腾讯更是长长的一串。文中参考了别人的代码。有了就没有必要再写了。可以读一下。不过我测试时发现了两次PageLoad的问题。注释了两句即可。同时修改了namespaces。同时提供完整的验证说明:
1 新建VerifyCode.aspx
cs文件代码如下:
复制代码 代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;
/**///// <summary>
/// 页面验证码程序
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">
/// </summary>
public partial class VerifyCode : System.Web.UI.Page
...{
static string[] FontItems = new string[] ...{ "Arial",
"Helvetica",
"Geneva",
"sans-serif",
"Verdana"
};
static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab,
Brushes.ForestGreen,
Brushes.DarkCyan,
Brushes.LightSlateGray,
Brushes.RoyalBlue,
Brushes.SlateBlue,
Brushes.DarkViolet,
Brushes.MediumVioletRed,
Brushes.IndianRed,
Brushes.Firebrick,
Brushes.Chocolate,
Brushes.Peru,
Brushes.Goldenrod
};
static string[] BrushName = new string[] ...{ "OliveDrab",
"ForestGreen",
"DarkCyan",
"LightSlateGray",
"RoyalBlue",
"SlateBlue",
"DarkViolet",
"MediumVioletRed",
"IndianRed",
"Firebrick",
"Chocolate",
"Peru",
"Goldenrod"
};
private static Color BackColor = Color.White;
private static Pen BorderColor = Pens.DarkGray;
private static int Width = 52;
private static int Height = 21;
private Random _random;
private string _code;
private int _brushNameIndex;
override protected void OnInit(EventArgs e)
...{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
//InitializeComponent();
//base.OnInit(e);
}
/**//**//**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
...{
//this.Load += new System.EventHandler(this.Page_Load);
}
/**//// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Page_Load(object sender, System.EventArgs e)
...{
if (!IsPostBack)
...{
//
// TODO : initialize
//
this._random = new Random();
this._code = GetRandomCode();
//
// TODO : use Session["code"] save the VerifyCode
//
Session["code"] = this._code;
//
// TODO : output Image
//
this.SetPageNoCache();
this.OnPaint();
}
}
/**//**//**//// <summary>
/// 设置页面不被缓存
/// </summary>
private void SetPageNoCache()
...{
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AppendHeader("Pragma","No-Cache");
}
/**//**//**//// <summary>
/// 取得一个 4 位的随机码
/// </summary>
/// <returns></returns>
private string GetRandomCode()
...{
return Guid.NewGuid().ToString().Substring(0, 4);
}
/**//**//**//// <summary>
/// 随机取一个字体
/// </summary>
/// <returns></returns>
private Font GetFont()
...{
int fontIndex = _random.Next(0, FontItems.Length);
FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));
return new Font(FontItems[fontIndex], 12, fontStyle);
}
/**//**//**//// <summary>
/// 取一个字体的样式
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private FontStyle GetFontStyle(int index)
...{
switch (index)
...{
case 0:
return FontStyle.Bold;
case 1:
return FontStyle.Italic;
default:
return FontStyle.Regular;
}
}
/**//**//**//// <summary>
/// 随机取一个笔刷
/// </summary>
/// <returns></returns>
private Brush GetBrush()
...{
int brushIndex = _random.Next(0, BrushItems.Length);
_brushNameIndex = brushIndex;
return BrushItems[brushIndex];
}
/**//**//**//// <summary>
/// 绘画事件
/// </summary>
private void OnPaint()
...{
Bitmap objBitmap = null;
Graphics g = null;
try
...{
objBitmap = new Bitmap(Width, Height);
g = Graphics.FromImage(objBitmap);
Paint_Background(g);
Paint_Text(g);
Paint_TextStain(objBitmap);
Paint_Border(g);
objBitmap.Save(Response.OutputStream, ImageFormat.Gif);
Response.ContentType = "image/gif";
}
catch ...{}
finally
...{
if (null != objBitmap)
objBitmap.Dispose();
if (null != g)
g.Dispose();
}
}
/**//**//**//// <summary>
/// 绘画背景颜色
/// </summary>
/// <param name="g"></param>
private void Paint_Background(Graphics g)
...{
g.Clear(BackColor);
}
/**//**//**//// <summary>
/// 绘画边框
/// </summary>
/// <param name="g"></param>
private void Paint_Border(Graphics g)
...{
g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);
}
/**//**//**//// <summary>
/// 绘画文字
/// </summary>
/// <param name="g"></param>
private void Paint_Text(Graphics g)
...{
g.DrawString(_code, GetFont(), GetBrush(), 3, 1);
}
/**//**//**//// <summary>
/// 绘画文字噪音点
/// </summary>
/// <param name="g"></param>
private void Paint_TextStain(Bitmap b)
...{
for (int n=0; n<30; n++)
...{
int x = _random.Next(Width);
int y = _random.Next(Height);
b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));
}
}
}

2 页面引用:
<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />
一般需要同时提供刷新功能(看不清楚换一张),代码如下
<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" /> <A href="javascript:getimgcode()">刷新验证码</A>
如使用了母版页,则用如下代码:
<img ID="getcode" alt="" src="VerifyCode.aspx" /> <%--<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />--%>
<A href="javascript:getimgcode()">刷新验证码</A>
超链接对应的javascript如下:
<script language="javascript" type="text/javascript">
function getimgcode()
{
var getimagecode = document.getElementById("getcode");
getimagecode.src = "VerifyCode.aspx";
}
</script>
3 判断验证
上述代码是将验证码存贮在Session中,用code来标志。读取代码Session["code"].ToString();
使用中,我们只需要比较Session["code"].ToString()和文本框输入的串(TextBoxCode.Text)是否相同即可进行判断。
if(Session["code"].ToString().Trim().Equals(TextBoxCode.Text.Trim()))
...{
Response.Write("Success");
}
测试通过!
分享到:
评论

相关推荐

    Asp.net 验证码控件

    在Asp.net开发中,验证码控件是一种常用的安全机制,用于防止自动机器人或者恶意脚本进行非法操作,如批量注册、频繁提交表单等。它通常要求用户输入图像上显示的一串随机字符,以此来验证用户是真实的人而不是程序...

    ASP.NET第一步—基于C#和ASP.NET 2.0---光盘内容

    本资源"ASP.NET第一步—基于C#和ASP.NET 2.0---光盘内容"显然是一个学习ASP.NET初学者的教程资料,其中包含了基于C#语言的ASP.NET 2.0版本的编程实践。 在ASP.NET 2.0版本中,引入了许多改进和新特性,使得开发更加...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    【ASP.NET与ASP的差异】ASP.NET是微软推出的一种基于.NET Framework的Web开发平台,相比传统的ASP,它引入了更多的特性和复杂性。在ASP.NET中,编程语言增加了C#,提供了VB.NET、C#、ACCESS和SQL的四种组合。ASP.NET...

    【ASP.NET编程知识】ASP.NET验证码实现(附源码).docx

    "ASP.NET 验证码实现详解" ASP.NET 验证码实现是 ASP.NET 编程中的一种常见技术,用于生成验证码图片,以防止恶意攻击和自动注册。下面将详细介绍 ASP.NET 验证码实现的知识点: 一、验证码生成 在 ASP.NET 中,...

    ASP.NET验证码 ASP.NET验证码

    ASP.NET验证码是微软ASP.NET框架中用于验证用户输入的有效性的一种机制,主要目的是防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。验证码通常涉及到图像生成、用户交互以及验证过程。 在ASP...

    上海交大ASP.NET课件---HTML控件和Web服务器控件

    上海交大ASP.NET课件---HTML控件和Web服务器控件

    人才网站设计-asp.net+sql-(系统源码)

    人才网站设计-asp.net+sql-(系统源码)人才网站设计-asp.net+sql-(系统源码)人才网站设计-asp.net+sql-(系统源码)人才网站设计-asp.net+sql-(系统源码)人才网站设计-asp.net+sql-(系统源码)人才网站设计-...

    asp.net验证码 asp.net验证码

    ASP.NET验证码技术详解 在ASP.NET开发中,验证码(CAPTCHA)是一种常用的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。验证码通过显示一组随机生成的图像或文本,要求用户...

    asp.net控件--下拉框多选

    ASP.NET控件是Web开发中的重要元素,它们用于构建用户界面并增强用户交互。在ASP.NET中,下拉框(DropDownList)是最常见的选择控件之一,通常用于提供一组预定义的选项供用户单选。然而,对于需要用户可以选择多个...

    asp.net 验证码实现代码

    asp.net 验证码实现代码 //确保生成的验证码是4位的,不是则重新产生 if(Session["code"].ToString().Trim().Length != 4) Session["code"] = RandNum(4); /// /// 生成图片并写入字符 /// /// 目标字符 //...

    ASP.NET验证码

    ASP.NET验证码是Web开发中一个重要的安全机制,用于防止自动化的机器人或恶意脚本进行非法操作,如批量注册、垃圾信息提交等。在ASP.NET框架中,验证码通常用于登录、注册和其他涉及用户输入的安全敏感页面。它通过...

    asp.net-mvc-core.6.0-layui-sqlsugar-后台模板-v1.2

    asp.net_mvc_core.6.0_layui_sqlsugar_后台模板_v1.2相关介绍《.NET Core6.0 MVC+layui+SqlSugar 简单增删改查》: https://blog.csdn.net/djk8888/article/details/134777133

    ASP.NET动态验证码

    ASP.NET动态验证码是一种用于验证用户身份的安全机制,广泛应用于网页登录、注册和其他涉及用户交互的安全场景。它通过生成随机的图像和文字组合,要求用户在输入框中输入看到的字符,以此来防止自动化的机器人或者...

    asp.net 验证码 实例

    ASP.NET验证码实例是一种常见的安全措施,用于防止自动化脚本或机器人在网站上进行恶意操作,如注册、登录或提交表单。在这个实例中,我们关注的是如何创建一个可交互的验证码系统,允许用户通过鼠标点击或按钮点击...

    asp.net验证码ajax

    在ASP.NET中,可以使用内置的Validator控件,如CustomValidator或ValidatorCallout,来生成和验证随机的图形验证码。图形验证码通常由扭曲的字母或数字组成,用户需要输入他们在图像中看到的文本。这一步可以通过...

    九头鸭.net验证码控件.rar

    【标题】"九头鸭.net验证码控件.rar" 指的是一款专为.NET平台设计的验证码组件,它主要用于网站的身份验证环节,增加系统安全性,防止自动机器人或恶意程序进行非法操作。九头鸭.net验证码控件是.NET开发者常用的一...

    波形扭曲彩色Asp.net验证码源码

    波形扭曲彩色Asp.net验证码源码 波形扭曲彩色Asp.net验证码源码 波形扭曲彩色Asp.net验证码源码

    ASP.NET动态网页设计案例教程VB.NET版-江红-素材

    本教程“ASP.NET动态网页设计案例教程VB.NET版-江红”着重于使用VB.NET语言来实现ASP.NET的网页设计,VB.NET是一种面向对象的编程语言,它在.NET平台上简化了编程过程,尤其适合初学者学习。 教程内容可能包括以下...

    ASP.NET版-名家专栏

    ASP.NET版-名家专栏 chm文件。

Global site tag (gtag.js) - Google Analytics