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(7) php 字符串相关应用
Mar 05 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
给ECShop添加最新评论
Jan 07 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
php简单实现多语言切换的方法
May 09 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php并发加锁示例
Oct 17 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
详解python里的命名规范
2018/07/16 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
爱国口号
2014/06/19 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
排球赛新闻稿
2015/07/17 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL