我刚接触php,对php的session 不明白,我在php.ini 文件里设置session.save_path = "F:\facai\session" ,并且文件夹下面能够产生session,但是运行代码的时候,如果点击快的时候,真个服务就锁死了,我估计是session锁的问题,代码是别人的,我看了下里面有很多session_start();语句,但是没有session_write_close()语句,程序是别人的,但是在别人的系统上运行正常。我想应该不是session没有关闭的问题,应该是我的php配置的问题。顺便问一句,session_start();之后一定要session_write_close()吗?如果是的话,为什么别人的系统就没有问题?

解决方案 »

  1.   

    没懂你说的啥子? 
    session_start();后一般都不用session_write_close();
      

  2.   

    感谢您的回复,但是我不知道,为什么连续点击页面之后,整个服务器就锁死了只要有session的页面都都不开,是不是我哪里配置有问题啊?
      

  3.   

    以文件方式(默认的)启动的 session,将在 session_start() 后锁定 session 临时文件
    期间如果有同名 sessionid 出现,则因文件被锁定而处于排队状态
    所以如果你的应用程序有并发现象时(比如频繁的ajax请求),那么就应该及时的执行 session_write_close() 以使临时文件解锁。
    对于其他方式的 session 不存在这个现象
      

  4.   

    即使有并发,也不会一直锁住,其他用户都打不开所有的页面了。同样的代码,别人可以(他们部署到linux系统了),我用的是xampp部署到windows上了,慢点点击没有问题,稍微快一点,就整个网站都被锁住了,我看了下代码中session_start()用到的地方太多了,我不可能每个地方都修改了。我想知道的是:是不是在php.ini中能够设置?或者别的什么方法?别人怎么就可以呢?谁知到啊?
      

  5.   

    session_start()用到的地方太多了?
    不存在的,改用的地方就要用!重复执行则 php5.4 会有警告你部署在本地,不就是测试吗?须知一个浏览器窗口的所有的选项卡的cookie是能够共享的,所以你点开多个选项卡,得到的 sessionid 都是相同的
      

  6.   

    不是的,我部署在服务器上,对页面中的链接连续点击多次,之后,系统就被锁住了,用别的电脑也进不去了,我觉得是不是在session_start()后面一定要调用session_write_close() 呢?还是在php管理session的时候有什么特殊的配置?还请各位高手不吝赐教啊,太急了
      

  7.   

    贴段代码:所有的页面开始都有这么一点代码
    <?php
    session_start();
    if (!isset($_SESSION['islogin']) && $_SESSION['islogon']!="Yes"){
            Header("Location:login.php"); 
        exit();
    }
    ?>
    我现在还不能确认是不是用session_start();之后必须用session_write_close()呢,还是我部署的有问题呢?
      

  8.   

    如果是 用别的电脑也进不去了,那么就与 session 无关了你 #8 的代码不是很正常吗?没有登录与登录未成功,就转向登录页面
    意思就是:包含此代码的页面只有用户才可访问
      

  9.   

    如果和session无关,那和什么有关系呢?我把代码
    <?php
    session_start();
    if (!isset($_SESSION['islogin']) && $_SESSION['islogon']!="Yes"){
            Header("Location:login.php"); 
        exit();
    }
    ?>
    修改成
    <?php
    if (!session_id()) session_start();
    //session_start();
    if (!isset($_SESSION['islogin']) && $_SESSION['islogon']!="Yes"){
            Header("Location:login.php");
            session_write_close(); 
            exit();
    }
    session_write_close(); 
    ?>
    然后连续点击页面,没有发现页面卡死的现象,是不是我的php版本有bug?还是windows系统造成读写session文件的问题?
      

  10.   

    版本:Apache Version  Apache/2.4.3 (Win32) PHP/5.4.7  ,先回家哭会儿,希望能有结果