php中Session阻塞问题的解决办法
本文实例讲述了PHP编程中的Session阻塞问题与解决方法。分享给大家供大家参考,具体如下:
使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。
疑问:是不是session_start导致了阻塞?
于是,我写了几个页面测试了一下,发现是session导致了阻塞,而其他两种情况不会造成阻塞。
查了下PHP的Bug列表,发现有人提出了这个问题:
Description:
------------
Calling session_start() appears to wait until other scripts have exited
that are using the same session. My guess is the 1st request locks the
session file for exclusive use, and the second request blocks until it
can open it.
PHP官方的回复是:
Thank you for taking the time to write to us, but this is not a bug.This is expected, the session file is locked to avoid corruption.
结合了PHP的Session机制,找到了阻塞的原因。由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当 session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用 session_start的时候就被阻塞了。
最简解决方法:
查了PHP的手册,发现一个session_write_close函数,作用是Write session data and end session,也就是写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时 候,在执行完以后,马上调用session_write_close函数即可。
以上就是php中Session阻塞问题的解决办法的详细内容,更多请关注其它相关文章!
上一篇: mysql+uwsgi+django+nginx部署记录
下一篇: nginx平台初探100%
推荐阅读
-
php中的路径问题与set_include_path使用介绍
-
php中php.ini遇到的问题
-
在PHP3中实现SESSION的功能(附、COOKIE函数库的使用:test_cookie.php3
-
Qt5中信号槽函数重载问题的两种解决办法
-
redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题,redissession_PHP教程
-
PHP 多维数组的排序问题 根据二维数组中某个项排序_php技巧
-
PHP中socket_read的问题_PHP
-
php中http与https跨域共享session的解决方法,httpssession
-
快速找出php中可能导致cpu飙升问题的代码行_PHP教程
-
javascript中的变量如何传到php中,一个高难问题 100大分!