0

我在 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>

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

4

1 回答 1

0

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

这就是您在页面中看到上一个验证码的原因。

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

于 2012-10-09T16:25:51.563 回答