2016-02-04 68 views
0

我想写验证码首先我写了asp然后我可以把它作为图像。问题是图像和会话不相等会话给出之前image.i找不到问题的原因。我该如何解决这个问题?验证码和会话不相等

using System; 

using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Drawing.Imaging; 


public partial class botdetect_captcha : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     //create image 
     Bitmap bmp = new Bitmap(100, 30); 
     //create object to draw 
     Graphics g = Graphics.FromImage(bmp); 
     //image background 
     g.Clear(Color.LightBlue); 

     //randomly string 
     string metin = RastgeleKelime(); 
     //send to session for validation 
     Session["gResim"] = metin; 

     //create font for image 
     Font font = new Font("Comic Sans MS", 14); 

     g.DrawString(metin, font, Brushes.DarkBlue, 4, 1); 


     //draw randomly three lines 
     Random rnd = new Random(); 
     g.DrawLine(Pens.DarkSlateGray, rnd.Next(0, 100), rnd.Next(0, 30), rnd.Next(0, 100), rnd.Next(0, 30)); 
     g.DrawLine(Pens.DarkRed, rnd.Next(0, 100), rnd.Next(0, 30), rnd.Next(0, 100), rnd.Next(0, 30)); 
     g.DrawLine(Pens.DarkOrange, rnd.Next(0, 100), rnd.Next(0, 30), rnd.Next(0, 100), rnd.Next(0, 30)); 

     //make response 
     bmp.Save(Response.OutputStream, ImageFormat.Jpeg); 
    } 

    public string RastgeleKelime() 
    { 
     string kelime = ""; 
     Random rnd = new Random(); 
     for (int i = 0; i < 6; i++) 
     { 
      kelime += ((char)rnd.Next('A', 'Z')).ToString(); 
     } 
     return kelime; 
    } 
} 
+1

听起来像一个'回发'问题..我也会建议存储初始化会话[“gResim”];在Global.asax文件中的值,然后正确地分配它,以及摆脱Session.Clear()方法可能不是必要的,当你逐步完成代码时会发生什么......也可以将你的注释转换成'English' – MethodMan

回答

0

我想“修理”通过采取以下步骤:

移动图像创建一个自定义处理程序。创建图像时,在会话或其他位置存储唯一值。

添加图像标记,将源设置为处理程序。

添加输入控制用户输入的响应

提交响应服务器

服务器响应比较独特的价值。

处理响应。