近来练习做个文章发布系统,感觉用.NET在有些方面确实很方便。其中有个小功能就是身份验证时的验证码产生问题,吸取allinhands斑竹等建议,采用图片输出验证码。吸取了过去ASP中的一些方法,避开了ASP产生图片的复杂性,使用.NET的GDI+动态生成图片的方法。
对于身份验证,.NET有一套方法,我正在学习,由于时间问题,还没实践。本方法是一小技巧,你可以把它看成是一个动态图片生成的小技巧。如果你GDI+学得好,可以输出很漂亮的曲线图或CHAT图形等。
验证的页面如下,验证的代码我不写了,相信大家都很熟悉。只是有一要点需要提一下,使用一Image控件,并设置ImageUrl属性为"inc/CheckCode.aspx",CheckCode.aspx是专门负责产生图片和生成验证码Session的。
图片如下:
另在Page_Load事件中,加以下代码:
// 检验验证码是否正确
if ( Session["AdminCheckCode"] == null)
{
labInfo.Text = "输入验证码不正确,请重新输入。";
imgCheckCode.ImageUrl = "../inc/CheckCode.aspx";
return;
}
if (txtCheckCode.Text != Session["AdminCheckCode"].ToString())
{
labInfo.Text = "输入验证码不正确,请重新输入。";
imgCheckCode.ImageUrl = "../inc/CheckCode.aspx";
return;
}
CheckCode.aspx代码为:
private void Page_Load(object sender, System.EventArgs e)
{
string strCode = RndCode();
Session["AdminCheckCode"] = strCode;
int width = 35;
int height = 16;
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.White);
g.DrawString(strCode, new Font("Arial", 10, FontStyle.Bold), SystemBrushes.WindowText, new Point(0, 0));
bmp.Save(Response.OutputStream, ImageFormat.Gif);
g.Dispose();
bmp.Dispose();
}
// 产生随机数函数
private string RndCode()
{
Random rnd = new Random();
int intRnd = 0;
while (intRnd < 1000)
{
intRnd = rnd.Next(10000);
}
return intRnd.ToString();
}