我有一個HTTPHandler,只要請求captcha.ashx頁面,就會向用戶生成一個驗證碼圖像。它的代碼很簡單:未從HTTPHandler保存的C#會話
CaptchaHandler handler = new CaptchaHandler();
Random random = new Random();
string[] fonts = new string[4] { "Arial", "Verdana", "Georgia", "Century Schoolbook" };
string code = Guid.NewGuid().ToString().Substring(0, 5);
context.Session.Add("Captcha", code);
Bitmap imageFile = handler.GenerateImage(code, 100, 70, fonts[random.Next(0,4)]);
MemoryStream ms = new MemoryStream();
imageFile.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] buffer = ms.ToArray();
context.Response.ClearContent();
context.Response.ContentType = "image/png";
context.Response.BinaryWrite(buffer);
context.Response.Flush();
然後在我的正規的網站,我有以下幾點:
...
<img id="securityCode" src="captcha.ashx" alt="" /><br />
<a href="javascript:void(0);" onclick="javascript:refreshCode();">Refresh</a>
...
這工作完全,生成圖像,併發送回用戶只要驗證碼。請求ashx頁面。我的問題是HTTPHandler不保存會話? 我試圖從正常頁面恢復會話,但我只有一個異常說它不存在,所以我打開跟蹤來查看哪些會話是活動的,並沒有列出HTTPHandler創建的會話(驗證碼)。
HTTPHandler使用IReadOnlySessionState與會話交互。 HTTPHandler是否只具有讀取權限,因此不存儲會話?
+1 - 搜索舊問題很少浪費時間。這也爲我解決了同樣的問題 - 謝謝。 – ChrisA 2010-05-04 18:10:17