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 08 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
php中hashtable实现示例分享
Feb 13 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP与Web页面的交互示例详解二
Aug 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书写格式详解(必看)
2016/05/23 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
Python队列的定义与使用方法示例
2017/06/24 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
实习报告评语
2014/04/26 职场文书
医师定期考核实施方案
2014/05/07 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
乐山大佛导游词
2015/02/02 职场文书
暑假生活随笔
2015/08/15 职场文书
详解python字符串驻留技术
2021/05/21 Python
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
Python中Selenium对Cookie的操作方法
2021/07/09 Python
详解MySQL的内连接和外连接
2023/05/08 MySQL