2016-02-04 69 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

我想「修理」通過採取以下步驟:

移動圖像創建一個自定義處理程序。創建圖像時,在會話或其他位置存儲唯一值。

添加圖像標記,將源設置爲處理程序。

添加輸入控制用戶輸入的響應

提交響應服務器

服務器響應比較獨特的價值。

處理響應。