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


Posted in PHP onAugust 07, 2017

本文实例讲述了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 相关文章推荐
PHP 文件扩展名 获取函数
Jun 03 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
PHP常见数组排序方法小结
Aug 20 PHP
TP5框架安全机制实例分析
Apr 05 PHP
通过PHP实现获取访问用户IP
May 09 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 #PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 #PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 #PHP
php封装的mongodb操作类代码
Aug 06 #PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 #PHP
php mysql数据库操作类(实例讲解)
Aug 06 #PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 #PHP
You might like
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
python实现图片转字符画的完整代码
2021/02/21 Python
C/C++有关内存的思考题
2015/12/04 面试题
综合测评自我鉴定
2013/10/08 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
授权收款委托书
2014/09/23 职场文书