我在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>
将始终返回先前的验证码值。 有什么建议吗?
答案 0 :(得分:0)
只有在浏览器请求图像时,才会将验证码存储在会话中。但是您在页面中显示会话值,该值在从浏览器请求图像之前发生。
这就是您在页面中看到之前验证码的原因。
要解决此问题,我建议将generateText
移至页面,并让页面将此值存储在会话中。处理程序只会从会话中选择值,构造图像并进行渲染。