遇到session和验证码不同步的问题了,session获取到的验证码总要比显示的值慢一拍,也就是说总是上一次的验证码。百度了下,发现这个问题非常多,但是却没找到一个解决的办法,如果不用session用什么好呢,cookie的话不太靠谱啊,可以直接读取到cookie的值,这样就能绕过验证了。产生验证码的页面,image.aspx.csprivate string GenerateCheckCode()
{
String RandomCode = String.Empty;
//随机生成2个数字A,B
System.Random a = new Random(System.DateTime.Now.Millisecond);
Int32 A = a.Next(10, 30);
Int32 B = a.Next(1, 20);
String jieguo = (A + B).ToString();
//写入Session
Session["CheckCode"] = jieguo;
//HttpContext.Current.Session["CheckCode"] = jieguo;
//写入cookie,由于没加密容易被获取放弃不用
//Response.Cookies.Add(new HttpCookie("CheckCode", jieguo));
//图片上要显示的内容
RandomCode = "请计算" + A.ToString() + "加" + B.ToString() + "等于几";
//写入函数用来调用
return RandomCode;调用验证码页面: protected void Page_Load(object sender, EventArgs e)
{
string yanzhenma = string.Empty;
if (HttpContext.Current.Session["CheckCode"] != null)
{
yanzhenma = HttpContext.Current.Session["CheckCode"].ToString();
}
String jg = jieguo.Text.ToString();
if (jg != yanzhenma)
{
yzm("不一样");
}
else
{
yzm("一样");
}
}
测试发现,只要输入上一次的值,就弹出一样,输入当前值弹出不一样,问题的原因弄清楚了,就是获取session是在写入session之前,所以出现这样的情况,有什么办法解决吗?谢谢
{
String RandomCode = String.Empty;
//随机生成2个数字A,B
System.Random a = new Random(System.DateTime.Now.Millisecond);
Int32 A = a.Next(10, 30);
Int32 B = a.Next(1, 20);
String jieguo = (A + B).ToString();
//写入Session
Session["CheckCode"] = jieguo;
//HttpContext.Current.Session["CheckCode"] = jieguo;
//写入cookie,由于没加密容易被获取放弃不用
//Response.Cookies.Add(new HttpCookie("CheckCode", jieguo));
//图片上要显示的内容
RandomCode = "请计算" + A.ToString() + "加" + B.ToString() + "等于几";
//写入函数用来调用
return RandomCode;调用验证码页面: protected void Page_Load(object sender, EventArgs e)
{
string yanzhenma = string.Empty;
if (HttpContext.Current.Session["CheckCode"] != null)
{
yanzhenma = HttpContext.Current.Session["CheckCode"].ToString();
}
String jg = jieguo.Text.ToString();
if (jg != yanzhenma)
{
yzm("不一样");
}
else
{
yzm("一样");
}
}
测试发现,只要输入上一次的值,就弹出一样,输入当前值弹出不一样,问题的原因弄清楚了,就是获取session是在写入session之前,所以出现这样的情况,有什么办法解决吗?谢谢
{
//
}
页面<IMG src="CheckCode.aspx" align="absmiddle">
if (Page.IsValid)
{
判断验证码
}
所以就想到用session,但是session一是耗资源,而是也不稳定。有想过用cookie写入md5加密的验证码值,不知道效果怎样。