为什么我显示出来的验证码和存到session里的不同步啊?网上查了很久也没解决,求高手解惑。。

Yuer 2012-05-31 02:03:12
我产生验证码的是一个叫ValidNums.aspx文件,ValidNums.aspx.cs里有三个方法
1. //生成随机字符串
private string CreateRanjdomNum(int NumCount)
2. //生成图片
private void CreateIamge(string validateNum)
3. //载入ValidNums.aspx页面时调用这两个方法产生验证码并把验证码字符串validateNum存入Session
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string validateNum = CreateRanjdomNum(4); //成生4位随机字符串
CreateIamge(validateNum); //将生成的随机字符串绘成图片
Session["ValidNums"] = validateNum; //保存验证码
}
}

然后我的登录页面login.aspx放验证码的地方是用image控件,ImageUrl="~/ValidNums.aspx"
验证输入时用的是:在login.aspx.cs里
string num = txtValidNums.Text.Trim();//获取验证码信息
//判断输入的验证码是否正确
if (Session["ValidNums"].ToString() == num.ToUpper())





问题1:无论我怎样输入验证码都不对。然后我用label控件在载入login.aspx页面时就将Session里的内容显示出来时。
发现Session里的内容跟验证码那儿显示的不一样。

问题2:解决这个问题后,我该如和实现验证码的单独刷新?因为验证码是一个单独的.aspx的文件,好单独在login页面载入。

求高手指点,新手分不多。请不要怀疑我的诚意。

...全文
309 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
WM_JAWIN 2013-08-15
  • 打赏
  • 举报
回复
if (Session["ValidNums"].ToString() == num.ToUpper()) 估计是你这个错了。
  • 打赏
  • 举报
回复
1、具体问题你还是调试跟踪下看,你在页面上显示Label不一致一般情况下是不对的,因为你的页面加载时还是上一次的Session,而页面加载后你的img src会去调用ValidNums页面,这时Session会被更新 2、单独刷新就是用js更新img对应的Src就可以了
$('img').attr("src","ValidNums.aspx?"+ + Math.random())
xiaoai5324 2013-08-15
  • 打赏
  • 举报
回复
我也遇到了同样的问题,第一次访问页面的时候session里面是空值,刷新后取出来的是上次页面上面显示的验证码
刹那的菜鸟 2012-06-01
  • 打赏
  • 举报
回复
事件处理的顺利 先处理 先存储。再执行的时候 提取的是上次存储的值
静缘 2012-06-01
  • 打赏
  • 举报
回复
页面载入显示SESSION和显示的结果不一致是对的 因为你载入的时候SESSION存的还是上次的结果 页面加载完成后 图片刷新 SESSION更新
我按照你的过程试了一下 应该没有问题的 你可以把代码全部贴出来参考一下

刷新校验码用楼上的方法就可以 增加一个onclick事件就可以
xmhxjjq 2012-06-01
  • 打赏
  • 举报
回复
缓存。 不是说你刷新- -

就是说 你的第一张图片的信息是被存储起来了的。
然后你去刷新请求第二张得时候 读取的是被存储的值
qq623932737 2012-06-01
  • 打赏
  • 举报
回复
第一个问题我不知道 ,第二个问题 刷新好办啊 ,在img空间加个 单击事件调用方法

function changeImage()
{
document.getElementById("img").src=document.getElementById("img").src+'?';
}

重新赋值就等于刷新了验证码
zhangxiangzhong 2012-06-01
  • 打赏
  • 举报
回复
应该是由于图片缓存造成的.建议在读取图片的链接上加一个随即生成的参数,只要这个参数每次都不一样,图片缓存问题自然就解决了.
纤纤素水 2012-06-01
  • 打赏
  • 举报
回复
听你的描述 怀疑是页面缓存问题。你在page_load加个Response.Expires=-100;清缓存试试。我当时遇见的问题和你差不多 就是这么解决的。

<a href="#" 
onclick="javascript:document.getElementById('valiCode').src='CreateCheckCode.aspx?id='+Math.random();return false;"
title="刷新验证码" >看不清,换张图片?不区分大小写。<asp:Label ID="Label1" runat="server" Text="" Visible="false" style=" color:Red;"></asp:Label>
</a>



这是我原来页面上的刷新。

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧