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 批量更新网页内容实现代码
Jan 05 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
php绘制一条直线的方法
Jan 24 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 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
用php+mysql一个名片库程序
2006/10/09 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python私有属性和方法实例分析
2015/01/15 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python3 中文文件读写方法
2018/01/23 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python numpy数组中的复制知识解析
2020/02/03 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
高中班长自我鉴定
2013/12/20 职场文书
小学教师事迹材料
2014/01/13 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
大班下学期个人总结
2015/02/13 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
docker-compose部署Yapi的方法
2022/04/08 Servers