2009-10-13 6 views
2

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

핸들러가 IRequiresSessionState를 구현할 필요가있다.

public class CaptchaHandler : IHttpHandler, IRequiresSessionState 
{ 
... 
} 
관련 문제