我在图片验证中,将验证码存入session中,由另一个页面读取。
在前端页面,由xmlhttprequest异步读取的时候没问题,图片刷新一次,返回的session值也更新一次。问题在于,我在网页中输入上述读取验证码的http时,无论怎么刷新session值一直显示不变,清空cookie也是这样。我试着尝试向代码中加入session_id(),echo出来的id一直没有变。
按照我的理解,作为全局变量,页面应该是向服务器读取session变量,当另一页面更新session时,其它页面的同一session值应该是同步更新的。所以,xmlhttprequest异步的结果是正常的,但怎么改由http读取同一页面里验证码就不变了?!

解决方案 »

  1.   

    我在图片验证中,将验证码存入session中,由另一个页面读取。那么你的另一个页面读取的是 session里面的已经存在的验证码吧?要更新的话是不是需要刷新验证码输出图片的呢?也就是赋值给session的页面需要刷新才对。
      

  2.   

    是的,当图片页面刷新,产生新的验证码,而刷新另一个存放session的页面则没有同步更新验证码值,而且一直不变。
      

  3.   

    贴出你session产生验证码的代码。
      

  4.   

    不好意思,犯了个低级错误,在代码前面忘了加session start,问题已解决。其实我想问,在a.php定义的session,如果不经过传递,b.php能不能访问该session?这样是不是不能读取a.php的session id?
      

  5.   

    session也是要声明,他的有效范围的,尽管,,,
      

  6.   

    不经过传递的意思是 session_start?
      

  7.   

    不是,是在同时开启session_start()的情况下。比如a.php页面设置$_SESSION['a']=1,这时b.php能即时取到a.php定义的$_SESSION['a']的值吗?
      

  8.   

    这时b.php能即时取到a.php定义的$_SESSION['a']的值吗这个这时是什么意思?在设置的时候立刻生效?当然生效 只要你刷新b.php执行到相关的代码部分就会是新的值,$_SESSION全局性的。
      

  9.   

    我测试时怎么不行?!
    设置后我运行a.php,注册$_SESSION['a'];再新开页面打开b.php,echo $_SESSION['a']。却提示Undefined index: a...
      

  10.   


    你是否开启了session.auto_start.
      

  11.   

    当然不行了 2个页面就不同步啊  不能单独打开的  他是跨页面的   当a.php跳转到b.php 这时候b.php才有值的
      

  12.   


    不是的,对于session这种全局变量,单独打开也是可以的。
      

  13.   

    没有,设为0;但a.php和b.php开始都声明session_start。
      

  14.   

    测试来说,这个说法是对的。当cookie打开的时候,session的传递应该是与cookie一样的。
    不过,不明白session为什么还叫超级全局变量。我希望的是像$_SERVER一样,每个页面单独调用都能取到值。如果session.auto_start=0,会不会有这样效果呢?
      

  15.   

    session.auto_start如果打开的话,不需要写session-start(),否者可能会导致sessionid的不同。贴下你的代码看看吧。
      

  16.   

    算了,我的相关页面共有1个html、4个js文件、3个php文件(1个smarty),贴出来一大堆,反正他们现在ie/ff/chrome/opera下都正常运行。
    只是想知道,session的运行机制是怎样的。