当前位置:编程学习 > C#/ASP.NET >>

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

我产生验证码的是一个叫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页面载入。

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

--------------------编程问答-------------------- 听你的描述 怀疑是页面缓存问题。你在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>



这是我原来页面上的刷新。 --------------------编程问答-------------------- 应该是由于图片缓存造成的.建议在读取图片的链接上加一个随即生成的参数,只要这个参数每次都不一样,图片缓存问题自然就解决了. --------------------编程问答-------------------- 第一个问题我不知道 ,第二个问题 刷新好办啊 ,在img空间加个 单击事件调用方法
 

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

重新赋值就等于刷新了验证码 --------------------编程问答-------------------- 缓存。 不是说你刷新- - 

就是说  你的第一张图片的信息是被存储起来了的。 
然后你去刷新请求第二张得时候 读取的是被存储的值  --------------------编程问答-------------------- 页面载入显示SESSION和显示的结果不一致是对的   因为你载入的时候SESSION存的还是上次的结果  页面加载完成后 图片刷新 SESSION更新   
我按照你的过程试了一下  应该没有问题的    你可以把代码全部贴出来参考一下

刷新校验码用楼上的方法就可以  增加一个onclick事件就可以 --------------------编程问答-------------------- 事件处理的顺利 先处理 先存储。再执行的时候 提取的是上次存储的值 --------------------编程问答-------------------- 我也遇到了同样的问题,第一次访问页面的时候session里面是空值,刷新后取出来的是上次页面上面显示的验证码 --------------------编程问答-------------------- 1、具体问题你还是调试跟踪下看,你在页面上显示Label不一致一般情况下是不对的,因为你的页面加载时还是上一次的Session,而页面加载后你的img src会去调用ValidNums页面,这时Session会被更新

2、单独刷新就是用js更新img对应的Src就可以了
$('img').attr("src","ValidNums.aspx?"+ + Math.random())
--------------------编程问答-------------------- if (Session["ValidNums"].ToString() == num.ToUpper())
估计是你这个错了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,