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 数组排序 array_multisort与uasort的区别
Mar 24 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php文件操作相关类实例
Jun 18 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 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
星际中的相关伤害
2020/03/04 星际争霸
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
PHP的基本常识小结
2013/07/05 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python编写登陆接口的方法
2017/07/10 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
继承权公证书
2014/04/09 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
比较node.js和Deno
2021/04/27 Javascript
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Python 图片添加美颜效果
2022/04/28 Python