PHP编程中的会话阻塞及其解决方案

来源:爱站网时间:2020-10-23编辑:网友分享
在开发中我们进行会使用session用于存储数据,但是很多人不知道在PHP开发中使用这个功能造成的问题有哪些,下面是爱站技术频道小编为大家带来的PHP编程中的会话阻塞及其解决方案,一起来看看吧!

在开发中我们进行会使用session用于存储数据,但是很多人不知道在PHP开发中使用这个功能造成的问题有哪些,下面是爱站技术频道小编为大家带来的PHP编程中的会话阻塞及其解决方案,一起来看看吧!

使用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编程中的会话阻塞及其解决方案,今天爱站技术频道小编就介绍到这里了,欢迎大家来js.aizhan.com学习更多的专业知识。

上一篇:PHP求有序数组最小绝对值的算法分析

下一篇:详解PHP+Mysql中的无限分类

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载