PHP编程中的Session阻塞问题与解决方法分析
本文实例讲述了PHP编程中的Session阻塞问题与解决方法。分享给大家供大家参考,具体如下:
使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。
疑问:是不是session_start导致了阻塞?
于是,我写了几个页面测试了一下,发现是session导致了阻塞,而其他两种情况不会造成阻塞。
查了下PHP的Bug列表,发现有人提出了这个问题:
Description:
------------
Callingsession_start()appearstowaituntilotherscriptshaveexited
thatareusingthesamesession.Myguessisthe1strequestlocksthe
sessionfileforexclusiveuse,andthesecondrequestblocksuntilit
canopenit.
PHP官方的回复是:
Thankyoufortakingthetimetowritetous,butthisisnotabug.Thisisexpected,thesessionfileislockedtoavoidcorruption.
结合了PHP的Session机制,找到了阻塞的原因。由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用session_start的时候就被阻塞了。
最简解决方法:
查了PHP的手册,发现一个session_write_close函数,作用是Writesessiondataandendsession,也就是写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时候,在执行完以后,马上调用session_write_close函数即可。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP中cookie用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。