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+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
php仿discuz分页效果代码
Oct 02 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
PHP7.0安装笔记整理
Aug 28 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PHP sdk实现在线打包代码示例
Dec 09 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安装攻略:常见问题解答(二)
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
Python写的服务监控程序实例
2015/01/31 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
python里glob模块知识点总结
2021/01/05 Python
事业单位公务员的职业生涯规划
2014/01/15 职场文书
班风口号
2014/06/18 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年法务工作总结
2014/12/11 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
Redis的字符串是如何实现的
2021/10/24 Redis