PHP中Session可能会引起并发问题


Posted in PHP onJune 26, 2015

在进行Web应用程序开发的时候,人们经常会用Session存储数据。但可能有人不知道,在PHP中,Session使用不当可能会引起并发问题。印度医疗行业软件解决方案提供商Plus91 Technologies高级工程师Kishan Gor在个人博客上对这个问题进行了阐释。

如果同一个客户端并发发送多个请求,而每个请求都使用了Session,那么PHP Session锁的存在会导致服务器串行响应这些请求,而不是并行。这是因为在默认情况下,PHP使用文件存储Session数据。对于每一个新的Session,PHP会创建一个文件,并持续向其中写入数据。所以,每次调用session_start()方法,就会打开Session文件,并取得文件的独占锁。这样,如果服务器脚本正在处理一个请求,而客户端又发送了一个同样需要使用Session的请求,那么后一个请求会阻塞,直至前一个请求处理完成释放了文件上的独占锁。不过,这只限于来自同一个客户端的多个请求,也就是说,来自一个客户端的请求并不会阻塞另一个客户端的请求。

 如果脚本很短,这通常没有问题。但如果脚本运行时间比较长,那就可能会产生问题。在现代Web应用程序开发中,有一个非常常见的情况,就是使用AJAX技术在同一个页面内发送多个请求获取数据。如果这些请求都需要使用Session,那么第一个请求到达服务器后会取得Session锁,其它请求就必须等待,所有请求将串行处理,即使它们彼此之间并没有依赖关系。这将大大增加页面的响应时间。

 有一个方法可以避免这个问题,就是在使用完Session以后立即调用session_write_close()方法关闭Session。这样Session锁就会释放,即使当前脚本还在等在处理。需要注意的是,调用该方法后,当前脚本就不能进一步操作Session了。

需要特别指出的是,本文所陈述的问题和观点只适用于使用session_start()方法的PHP默认Session管理模式。比如,有用户就指出,如果将应用程序托管在AWS EC2上,并正确配置DynamoDB,Session锁定问题就不会出现。

以上就是本文的全部内容了,希望大家能喜欢。

PHP 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
php5 and xml示例
Nov 22 PHP
如何使用PHP中的字符串函数
Nov 24 PHP
php 301转向实现代码
Sep 18 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
比较全面的PHP数组的使用方法小结
Sep 23 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
php获取linux命令结果的实例
Mar 13 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 #PHP
PHP获取当前相对于域名目录的方法
Jun 26 #PHP
php通过获取头信息判断图片类型的方法
Jun 26 #PHP
以文件形式缓存php变量的方法
Jun 26 #PHP
PHP批量去除BOM头代码分享
Jun 26 #PHP
PHP多态代码实例
Jun 26 #PHP
PHP微信开发之二维码生成类
Jun 26 #PHP
You might like
PHP字符串处理的10个简单方法
2010/06/30 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
javascript实现拖放效果
2015/12/16 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
django表单的Widgets使用详解
2019/07/22 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
优秀应届生推荐信
2013/11/09 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
党支部对照检查材料
2014/08/25 职场文书
见习报告的格式
2014/10/31 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
人力资源部工作计划
2019/05/14 职场文书
《三国志》赏析
2019/08/27 职场文书
python 提取html文本的方法
2021/05/20 Python