PHP编程中的Session阻塞问题与解决方法分析

yipeiwu_com6年前PHP代码库

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《PHP中cookie用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

PHP工程师VIM配置分享

PHP工程师VIM配置分享

关于我的vim配置 经常在服务器上写代码,一个朋友提供了关于他的vim配置,在此分享给大家。 界面效果图: .vimrc 内容如下  "==================...

php简单读取.vcf格式文件的方法示例

本文实例讲述了php简单读取.vcf格式文件的方法。分享给大家供大家参考,具体如下: /** * 读取.vcf格式文件 * @param $filename */ function...

PHP数组与对象之间使用递归实现转换的方法

本文实例讲述了PHP数组与对象之间使用递归实现转换的方法。分享给大家供大家参考。具体实现方法如下: 这里涉及一些简单的对象与数组的相互转换的问题,采用递归写了两个方法如下: func...

PHP递归实现快速排序的方法示例

本文实例讲述了PHP递归实现快速排序的方法。分享给大家供大家参考,具体如下: 首先我们要理解一下快速排序的原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数...

php实现遍历目录并删除指定文件中指定内容

php实现遍历目录并删除指定文件中指定内容

现在正坐在安静的寝室里,寒假俨然已经离我而去了……今天发的是我寒假里搞的最后一次学习,之后的时间就一直在看海贼王了。 以前写过一个C语言的遍历目录+复制文件的程序,很长很复杂,现在用PH...