captcha.ashx 페이지가 요청 될 때마다 사용자에게 Captcha 이미지를 생성하는 HTTPHandler가 있습니다. 이 코드는 간단하다 : 이것은 완벽하게 작동HTTPHandler에서 세션이 저장되지 않았습니다.
...
<img id="securityCode" src="captcha.ashx" alt="" /><br />
<a href="javascript:void(0);" onclick="javascript:refreshCode();">Refresh</a>
...
, 이미지를 생성하고 다시 사용자마다 보안 문자로 전송됩니다
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();
그런 다음 내 일반 웹 사이트에, 나는 다음 얻었다. ashx 페이지가 요청되었습니다. 내 문제는 HTTPHandler가 세션을 저장하지 않는다는 것입니다. 정상적인 페이지에서 세션을 다시 가져 오려고했지만 예외가 있다는 것을 알았 기 때문에 Trace를 켜서 어떤 세션이 활성 상태인지 확인하고 HTTPHandler가 만든 세션을 나열하지 않았습니다. (Captcha).
HTTPHandler는 IReadOnlySessionState를 사용하여 세션과 상호 작용합니다. HTTPHandler는 읽기 액세스 권한 만 가지고 세션을 저장하지 않습니까?
+1 - 오래된 질문을 검색하는 것이 거의 낭비되지 않습니다. 이것은 나에게도 똑같은 문제를 해결했다. – ChrisA