在webform中写验证码必须先建一个一般处理程序。
public class Handler : IHttpHandler ,IRequiresSessionState//session接口
{
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "image/Jpeg";
string charSet = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y";
string[] CharArray = charSet.Split(',');
string code = "";
int temp = -1;
Random rand1 = new Random();
for (int j = 0; j < 4; j++)
{
if (temp != -1)
{
rand1 = new Random(j * temp * ((int)DateTime.Now.Ticks));
}
int t = rand1.Next(CharArray.Length - 1);
if (temp == t)
{
return;
}
temp = t;
code += CharArray[t];
}
context.Session["yanzhen"]=code;
System.Drawing.Bitmap image = new System.Drawing.Bitmap(50, 23);
Graphics g = Graphics.FromImage(image);
Font f = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Italic | System.Drawing.FontStyle.Bold)); // 前景色
Brush b = new System.Drawing.SolidBrush(Color.Black); // 背景色
g.Clear(Color.White); // 填充文字
g.DrawString(code, f, b, 0, 1); // 随机线条
Pen linePen = new Pen(Color.Gray, 0);
Random rand = new Random();
for (int i = 0; i < 5; i++)
{
int x1 = rand.Next(image.Width);
int y1 = rand.Next(image.Height);
int x2 = rand.Next(image.Width);
int y2 = rand.Next(image.Height);
g.DrawLine(linePen, x1, y1, x2, y2);
}
// 随机点
for (int i = 0; i < 30; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
image.SetPixel(x, y, Color.Gray);
}
// 边框
g.DrawRectangle(new Pen(Color.Gray), 0, 0, image.Width - 1, image.Height - 1);
// 输出图片
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.ClearContent();
context.Response.BinaryWrite(ms.ToArray());
}
再用简单的ajax异步操作刷新
function ajax(url,success) {
var xmlrequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xmlrequest.open("POST", url, true);
xmlrequest.onreadystatechange() = function () {
if (xmlrequest.readyState==4) {
if (xmlrequest.status == 200) {
success(xmlrequest.responseText);
}
else {
alert("Action错误!");
}
}
}
xmlrequest.send();
}