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的类 功能齐全的发送邮件类
Oct 09 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
Windows7下的php环境配置教程
Feb 28 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
php生成二维码
Aug 10 PHP
反射调用private方法实践(php、java)
Dec 21 PHP
smarty自定义函数用法示例
May 20 PHP
php中引用符号(&)的使用详细介绍
Dec 06 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
Laravel-admin之修改操作日志的方法
Sep 30 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
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
javascript的函数
2007/01/31 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
Python实现截屏的函数
2015/07/26 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python微信公众号开发平台
2018/01/25 Python
实例介绍Python中整型
2019/02/11 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
python3让print输出不换行的方法
2020/08/24 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
项目建议书范文
2014/05/12 职场文书
总经理任命书范本
2014/06/05 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript