如何保存验证码并判断比较

bawfnwy 2009-05-07 10:55:30
登陆界面载入的时候生成了随机数做为验证码。如何来实现验证码的保存和判断呢?
<script runat="server">

protected void ib1_Click(object sender, ImageClickEventArgs e)
{

}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Random yzm = new Random();
Session.Add(yzm);
label1.Text = yzm.Next(1000, 9999).ToString().Trim();//随机生成验证码
}
}
</script>

<body >
<form id="form1" runat="server">
<div>
<table id="tb1" runat="server" height="600" width="100%">
<tr>
<td>
<table height="290" width="545" align="center" cellpadding="0">
<tr>
<td height="30" background="images/gongqiu.GIF" style="width: 550px">
<table align="center">
<tr>
<td>
管理员:
</td>
<td style="width: 217px">
<%--创建一个文本框控件,存放用户名 --%>
<asp:TextBox ID="textbox1" runat="server" />
<asp:RequiredFieldValidator ID="rfv1" runat="server" ControlToValidate="textbox1" ErrorMessage="*必填项" />
</td>
</tr>
<tr>
<td>
密    码:
</td>
<td style="width: 217px">
<asp:TextBox ID="pwd" runat="server" TextMode="Password" Width="149px" />
<%--<input type="password" runat="server" id="pwd" />--%>
<asp:RequiredFieldValidator ID="rfv2" runat="server" ControlToValidate="pwd" ErrorMessage="*必填项" />
</td>
</tr>
<tr>
<td>
验证码:
</td>
<td style="width: 217px">
<asp:TextBox ID="textbox3" runat="server" />
<asp:Label ID="label1" runat="server" />
</td>
<td>

<asp:RegularExpressionValidator ID="rev1" runat="server" ControlToValidate="textbox3" ErrorMessage="必为4位数字" ValidationExpression="[0-9]{4}" />
</td>
</tr>
<tr>
<td>
<asp:ImageButton ID="ib1" runat="server" ImageUrl="~/images/denglu.gif" OnClick="ib1_Click" />
<asp:ImageButton ID="ib2" runat="server" ImageUrl="~/images/chongzhi.gif" OnClick="ib2_Click" />
</td>
<td>
<asp:Label ID="label2" runat="server" Visible="False" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

</div>
</form>
</body>
...全文
298 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝海D鱼 2009-05-07
  • 打赏
  • 举报
回复

处理页:gif.ashx

C# code
public class gif : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest (HttpContext context)
{
ValidateCode gif = new ValidateCode();//初始化验证码生成类
string valid = "";//定义随机数
MemoryStream ms = gif.Create(out valid);//获取包括验证码图片的内存流
context.Session["gif"] = valid;//验证码存储在Session中,供验证。
context.Response.ClearContent();//清空输出流
context.Response.ContentType = "image/png";//输出流的格式
context.Response.BinaryWrite(ms.ToArray());//输出
context.Response.End();
}

public bool IsReusable {
get {
return false;
}
}
}




调用页:

HTML code
<img id="sign_img" height="30" src="Handle/gif.ashx" title="验证码" width="100" onclick="this.src='Handle/gif.ashx?'+new Date()" />



蓝海D鱼 2009-05-07
  • 打赏
  • 举报
回复

把 随机码 放到 session 里面

现在都流行 验证 图片

public class ValidCode
{
public ValidCode()
{
}
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
System.Random random = new Random();
for (int i = 0; i < 5; i++)
{
number = random.Next();
if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26));

checkCode += code.ToString();
}
// HttpContext.Current.Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
return checkCode;
}


/// <summary>
/// 生成验证码图片
/// </summary>
public void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
Graphics g = Graphics.FromImage(image);

try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}

Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
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);
g.DrawString(checkCode, font, brush, 2, 2);

//画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Gif";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
public void ValidateCode(string VNum)
{
Bitmap validateimage;
Graphics g;
validateimage = new Bitmap(50, 20, PixelFormat.Format24bppRgb);
g = Graphics.FromImage(validateimage);

g.DrawString(VNum, new Font("Comic Sans MS", 12), new SolidBrush(Color.White), new PointF(3, 0));
g.FillRectangle(new LinearGradientBrush(new Point(0, 0), new Point(110, 20), Color.FromArgb(0, 0, 0, 0), Color.FromArgb(255, 255, 60, 40)), 0, 0, 120, 30);
g.Save();
MemoryStream ms = new MemoryStream();
validateimage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/gif";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.End();
}
/// 生成随机数
public string MakeValidateCode()
{
char[] s = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
string num = "";
Random r = new Random();
for (int i = 0; i < 4; i++)
{
num += s[r.Next(0, s.Length)].ToString();
}
return num;
}


rexhanpeng 2009-05-07
  • 打赏
  • 举报
回复
放在SESSION里啊
chenyu112 2009-05-07
  • 打赏
  • 举报
回复
使用Session保存生成的验证码,然后和用户输入的验证码进行比较

没有看程序,我都是这么写的
dengchenlu 2009-05-07
  • 打赏
  • 举报
回复
验证码生成代码网上有
然后存到COOKIE 比较的时候获取COOKIE就可以
bawfnwy 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhanglei_love2008 的回复:]
if (!Page.IsPostBack)
{
Random yzm = new Random();
Session.Add(yzm);
label1.Text = yzm.Next(1000, 9999).ToString().Trim();//随机生成验证码
Session["Code"]=label1.Text;
}

然后再用session["code"]与textbox输入值比较就可以了。
[/Quote]
这里是这样写参数的。。在大家的帮助下终于解决了 谢谢哈。Session.Add("Code", yzm.GetHashCode());
中年秃头大叔 2009-05-07
  • 打赏
  • 举报
回复
if (!Page.IsPostBack)
{
Random yzm = new Random();
Session.Add(yzm);
label1.Text = yzm.Next(1000, 9999).ToString().Trim();//随机生成验证码
Session["Code"]=label1.Text;
}

然后再用session["code"]与textbox输入值比较就可以了。
rightnow1980 2009-05-07
  • 打赏
  • 举报
回复
存到session里,然后比较

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧