最近小舖有人提到圖片驗證碼的文章.....
一般在輸入表單裡加上圖片驗證碼是不錯的...可以防止一些攻擊....
一般圖片驗證碼都是寫在aspx裡,而且都是利用cookie儲存....
小弟用一個簡單的範例,,介紹如何將圖片驗碼碼寫在handle裡,,並且將驗證碼儲存在session裡....
此範例,包含cookie與session的用法..,驗證碼的程式是參考網路上別人寫好的code...c#範例
ValidateCode.ashx
001 
<%@ WebHandler Language=
"C#" Class=
"ValidateCode" %>
002
003 

<%@ WebHandler Language=
"C#" Class=
"ValidateCode" %>
004
005
using ...System;
006
using System.Web;
007
using System.Drawing;
008
using System.Web.SessionState;
009
010
public class ValidateCode : IHttpHandler, IRequiresSessionState
011 
...{
012 
013 public void ProcessRequest(HttpContext context)
014 
...{
015
CreateCheckCodeImage(GenerateCheckCode(context), context);
016
}
017 
018 private string GenerateCheckCode(HttpContext context)
019 
...{
020
int number;
021
char code;
022
string checkCode = String.Empty;
023 
024 System.Random random = new Random();
025 
026 for (int i = 0; i < 5; i++)
027 
...{
028
number = random.Next();
029 
030 if (number % 2 == 0)
031
code = (char)('0' + (char)(number % 10));
032
else
033
code = (char)('A' + (char)(number % 26));
034 
035 checkCode += code.ToString();
036
}
037 
038 //儲存在cookie
039
context.Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
040 
041 //儲存在session
042
context.Session["CheckCode"] = checkCode;
043 
044 return checkCode;
045
}
046 
047 private void CreateCheckCodeImage(string checkCode, HttpContext context)
048 
...{
049
if (checkCode == null || checkCode.Trim() == String.Empty)
050
return;
051 
052 System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
053
Graphics g = Graphics.FromImage(image);
054 
055 try
056 
...{
057
//生成?机生成器
058
Random random = new Random();
059 
060 //清空?片背景色
061
g.Clear(Color.White);
062 
063 //??片的背景噪音?
064
for (int i = 0; i < 25; i++)
065 
...{
066
int x1 = random.Next(image.Width);
067
int x2 = random.Next(image.Width);
068
int y1 = random.Next(image.Height);
069
int y2 = random.Next(image.Height);
070 
071 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
072
}
073 
074 Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
075
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
076
g.DrawString(checkCode, font, brush, 2, 2);
077 
078 //??片的前景噪音?
079
for (int i = 0; i < 100; i++)
080 
...{
081
int x = random.Next(image.Width);
082
int y = random.Next(image.Height);
083 
084 image.SetPixel(x, y, Color.FromArgb(random.Next()));
085
}
086 
087 //??片的?框?
088
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
089 
090 System.IO.MemoryStream ms = new System.IO.MemoryStream();
091
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
092
context.Response.ClearContent();
093
context.Response.ContentType = "image/Gif";
094
context.Response.BinaryWrite(ms.ToArray());
095
}
096
finally
097 
...{
098
g.Dispose();
099
image.Dispose();
100
}
101
}
102 
103 public bool IsReusable
104 
...{
105
get
106 
...{
107
return false;
108
}
109
}
110 
111
}
112
CheckCode.aspx
01 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CheckCode.aspx.cs" Inherits="CheckCode" %>
02
03 <%@ Register Src="ValidateCode.ascx" TagName="ValidateCode" TagPrefix="uc1" %>
04 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
05 <html xmlns="http://www.w3.org/1999/xhtml">
06 <head id="Head1" runat="server">
07 <title>CheckCode</title>
08 </head>
09 <body>
10 <form id="form1" runat="server">
11 <div>
12 <asp:Image ID="Image1" runat="server" ImageUrl="ValidateCode.ashx" /><br />
13 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
14 <br />
15 <asp:Button ID="Button1" runat="server" Text="CheckCode(cookie)" OnClick="Button1_Click" /><br />
16 <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="CheckCode(Session)" /></div>
17 </form>
18 </body>
19 </html>
20
CheckCode.aspx.cs
執行結果:
參考網址:http://www.cnblogs.com/gwazy/archive/2005/04/18/139510.html
推到 Twitter!
推到 Plurk!
2008/3/16 23:42|
閱讀數 : 2032
|
1 人收藏
我要推薦
|
|
文章分類 :
ASP.NET
訂閱
回覆
發表回覆
-
標題: *
-
-
姓名: *
-
-
Email: (將不會被顯示)
-
-
Url:
-
-
回覆: *
-
-