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 配置文件中open_basedir选项作用
Jul 19 PHP
php继承的一个应用
Sep 06 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
PHP-Java-Bridge使用笔记
Sep 22 PHP
PHP多线程类及用法实例
Dec 03 PHP
php中关于换行的实例写法
Sep 26 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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
一个ftp类(ini.php)
2006/10/09 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
Jquery cookie操作代码
2010/03/14 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
浅谈django 重载str 方法
2020/05/19 Python
Python如何实现机器人聊天
2020/09/10 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
建筑施工员岗位职责
2013/11/26 职场文书
班会关于环保演讲稿
2013/12/29 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
大学三年计划书范文
2014/04/30 职场文书
上诉答辩状范文
2015/05/22 职场文书
诚实守信主题班会
2015/08/13 职场文书
早安问候语大全
2015/11/10 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫