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 session处理的定制
Mar 16 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
使用URL传输SESSION信息
Jul 14 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 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/17 数码科技
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
python搜索指定目录的方法
2015/04/29 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
如何在python中实现线性回归
2020/08/10 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
英语专业学生的自我评价
2013/12/30 职场文书
工作中个人的自我评价
2013/12/31 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
四群教育工作实施方案
2014/03/26 职场文书
幼师中班个人总结
2015/02/12 职场文书
英文慰问信
2015/02/14 职场文书
部门主管竞聘书
2015/09/15 职场文书
《藏戏》教学反思
2016/02/23 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang
Python开发五子棋小游戏
2022/04/28 Python