captcha处理程序在会话过期中存储值

时间:2012-10-09 16:16:00

标签: c# asp.net session captcha httphandler

我在asp.net中尝试使用验证码处理程序时遇到困难,任何帮助都将不胜感激。 想象一下,我们有这样一个处理程序:

public void ProcessRequest(HttpContext context)
{
    var text = generateText();
    using (var image = generateImage(text))
    {
        context.Response.Clear();
        context.Response.ContentType = "image/jpeg";
        context.Session.Add("captcha", text);
        image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    }
}

然后在一些default.aspx中我们把:

<img src="<%=CaptchaImageUrl %>"/>
<p><%=Context.Session["captcha"]%></p>

意思是我们想要显示验证码图像并检查存储在会话中的验证码值。但问题是,default.aspx中的当前会话值已经过了验证码处理程序的一部分,并且

<p><%=Context.Session["captcha"]%></p>

将始终返回先前的验证码值。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

只有在浏览器请求图像时,才会将验证码存储在会话中。但是您在页面中显示会话值,该值在从浏览器请求图像之前发生。

这就是您在页面中看到之前验证码的原因。

要解决此问题,我建议将generateText移至页面,并让页面将此值存储在会话中。处理程序只会从会话中选择值,构造图像并进行渲染。