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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
Mar 27 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
学生会主席事迹材料
2014/01/28 职场文书
国窖1573广告词
2014/03/21 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
酒会邀请函
2015/01/31 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
警用民用对讲机找不同
2022/02/18 无线电
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android