J'ai un HTTPHandler qui produit une image Captcha à l'utilisateur chaque fois que la page captcha.ashx est demandée. Le code est simple:C# Session non enregistrée à partir de HTTPHandler
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();
ensuite sur mon site Web régulièrement, je me suis ce qui suit:
...
<img id="securityCode" src="captcha.ashx" alt="" /><br />
<a href="javascript:void(0);" onclick="javascript:refreshCode();">Refresh</a>
...
Cela fonctionne parfaitement, l'image est générée et envoyée à l'utilisateur chaque fois que le captcha. La page ashx est demandée. Mon problème est que le HTTPHandler ne sauvegarde pas la session? J'ai essayé de récupérer la session de la page normale mais j'ai seulement une exception disant qu'elle n'existait pas, j'ai donc activé Trace pour voir quelles sessions sont actives et ne liste pas la session créée par HTTPHandler (Captcha).
HTTPHandler utilise IReadOnlySessionState pour interagir avec les sessions. Le HTTPHandler a-t-il seulement un accès en lecture et ne stocke donc pas la session?
+1 - la recherche de vieilles questions est rarement une perte de temps. Cela a résolu exactement le même problème pour moi - merci. – ChrisA