+ -
当前位置:首页 → 问答吧 → 分享一下经验,容易被忽视的session_commit

分享一下经验,容易被忽视的session_commit

时间:2011-09-15

来源:互联网

这段时间一直在用PHP做报表,碰到了一些非常头痛的问题,就是有些报表的SQL跑的时间比较长,而当这个报表正没有结束运行的时候,其它的报表页面就绝对被卡住
经过一步步分析,终于找到了病症之处:session
session最常用的就是记录用户的登陆信息,而在不少资料中,会告诉你,session_start()后,无需自己去调用session_commit(),脚本在结束后自动调用session_commit()
如果你的脚本运行的时间很短,自然不会出什么问题,但如果是需要比较长的运行时间的话,就杯具了。。。。
看看下面这两个简单的脚本吧,拿去运行一次,你就知道什么结果了
test.phpPHP code
<html>
    <head>
        <title></title>
    </head>
    <body>
        <?php
        session_start();
        $_SESSION["message"]="我留下的脚印";
        // session_commit(); 
        sleep(20);
        ?>
        休息了20秒钟...
    </body>
</html>


test2.phpPHP code
<html>
    <head>
        <title></title>
    </head>
    <body>
        <?php
        session_start();
        //session_commit(); //别担心,session_commit()以后,$_SESSION数组的内容还在.
        echo $_SESSION["message"]."<br/>";
        ?>
        我等到花儿也谢了
    </body>
</html>

先运行test.php,然后20秒之内运行test2.php。按道理,test2.php会一下子就闪出来,但因为test.php还在抓住session不放,于是test2.php就被session_start()卡住了,直到test.php结束后,test2.php才得以继续。
而如果把代码中注释掉的那两行加上的话,才会得到我们所期望的效果。
我被这个小问题困扰了好一阵子,在这里分享一下经验给各位新手们:记住及时的session_commit(),别听那些只会copy的人在那说不用手动调用session_commit(),否则吃苦的就是你

作者: sharp_ice   发布时间: 2011-09-15

该回复于2011-09-15 13:18:54被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#2楼 得分:0回复于:2011-09-15 13:11:06
受教!可能和服务器配置也有关系。

作者: wanwan010   发布时间: 2011-09-15

谢谢 呵呵

作者: craboy1   发布时间: 2011-09-15

相关阅读 更多