在同一个域名和同一浏览器下,同时使用session_start()时,假设先打开的页面没有处理完,后面的页面要一直等到前一个页面执行完才会处理。
我有两个页面 a.php,b.php 
a.php 代码如下:
<?php
session_start();sleep(30);echo $_SESSION["uid"];
?>b.php 代码如下:
<?php
session_start();
echo $_SESSION["uid"];
?>session 在其他页面已经存在;效果是 b页面的sesion_start() 一直等待;请问是什么原因呢?如果我想在b.php中获取session值,应该怎么写呢?

解决方案 »

  1.   

    没有听懂,什么是假设先打开的页面没有处理完果我想在b.php中获取session值,应该怎么写呢?echo $_SESSION["uid"];是这样的啊
      

  2.   

    sleep()会暂时停止进程,所以同一用户同一浏览器下的脚本会等sleep结束后才能执行。
    用两个浏览器可以。
      

  3.   


    就是一个页面在等待的时候, 其他页面不能使用session;上面是个例子:现实中是 A页面发出请求等待数据返回,B页面需要获取SESSION ,但是不行;请问如何在B页面中怎么样获取SESSION;
      

  4.   

    是的,是这样的
    在 file 模式下的 session,每个sessionid 对应一个文件
    执行 session_start() 时,对应的文件以独占方式打开,直至程序运行结束或显式的关闭 session 时才释放
    php 的这个做法本身并没有错,session 临时文件本身就属于单个浏览器。同时还可以防止临时文件被系统其它进程破坏
      

  5.   

    不可以,但可以在你第一个程序的 sleep 前(也就是说此后的操作不涉及 session 处) 执行 session_write_close() 以释放 session 资源