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 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
php实例分享之mysql数据备份
May 19 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
PHP魔术方法的使用示例
Jun 23 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 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上传文件常见问题总结
2015/02/03 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
javascript实现下拉菜单效果
2021/02/09 Javascript
python局部赋值的规则
2013/03/07 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python实现八大排序算法
2016/08/13 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
中专三年学习的个人自我评价
2013/12/12 职场文书
矿泉水广告词
2014/03/20 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2016继续教育研修日志
2015/11/13 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL