在Asp.net中使用一般處理常式產生驗證碼

來源:互聯網
上載者:User

標籤:

 

  如果期望一般處理常式(ashx)處理Session,必須實現【System.Web.SessionState】命名空間下的【IRequiresSessionState】介面。

  asp.net中的驗證碼一般是通過請求ashx頁面來完成的,將ashx的內容物件的響應類型設定為"image/jpeg".使用Random類是隨機產生一個字串,把這個字串寫入到一張圖片並儲存到Session中,再將圖片儲存到響應流的輸出中,這樣每次用戶端就會請求到一個驗證碼的圖片了。

 

下面是我的具體實現:

用戶端

  把驗證碼圖片的src屬性指向ashx驗證碼處理常式的路徑,點擊圖片或"看不清"實現換圖的功能是通過改變驗證碼圖片的src屬性實現。在每次更換驗證碼時,為了避免緩衝而未發出請求,需要在src屬性的URL末尾加個不固定的參數,如:this.src="getValidateCode.ashx?t="+new Date();因為瀏覽器處理相同的請求的時候是優先從緩衝中讀取的,這樣瀏覽器會為每次請求都發送請求,而不是從緩衝中讀取。


伺服器端

產生隨機碼的方法:

 1 private string getValidateCode(int validateCodeLength) 2 { 3   // 定義可能出現的所有字串,實際應用中有些字元很難區分,如0和o,可以去掉。 4   string allChars = @"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 5   // 擷取所有字元的長度 6   int charsLength = allChars.Length; 7    8   string validateCode = string.Empty; 9   // 聲明隨機數產生器10   Random ran = new Random();11   //迴圈的次數代表產生的隨機字串的長度12   for (int i = 0; i < validateCodeLength; i++)13   {14     //將隨機產生的數字作為字串的索引,從而可以獲得其下標所在的字元,並將這個字元加到隨機字串上15     validateCode += allChars[ran.Next(charsLength)];16   }17   //返回字串18   return validateCode;19 }


ashx中的處理過程

 1 public void ProcessRequest(HttpContext context) 2 { 3   //將響應類型設定成圖片 4   context.Response.ContentType = "image/jpeg"; 5   //擷取一個4位元的驗證碼 6   string validateCode = getValidateCode(4); 7   //把驗證碼寫入Session 8   context.Session["validateCode"] = validateCode; 9   //建立驗證碼圖片10   using (Bitmap img = new Bitmap(100, 40))11   {12     //擷取背景驗證碼的背景圖片路徑13     string bgPath = context.Server.MapPath("~/image/bg.gif");14     using (Bitmap bg = new Bitmap(bgPath))15     {16       using (Graphics g = Graphics.FromImage(img))17       {18         //使用背景圖片畫刷填充驗證碼圖片19         g.FillRectangle(new TextureBrush(bg), 0, 0, img.Width, img.Height);20         //將驗證碼字串寫入圖片21         g.DrawString(validateCode, new Font("微軟雅黑", 16, FontStyle.Italic), Brushes.Black, 5, 5);22         //將驗證碼圖片儲存至響應流,用戶端就能看到這個圖片了23         img.Save(context.Response.OutputStream, ImageFormat.Jpeg);24       }25     }26   }27 }

 

在Asp.net中使用一般處理常式產生驗證碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.