写点什么

PHP Session 可能会引起并发问题

  • 2015-01-22
  • 本文字数:894 字

    阅读完需:约 3 分钟

在进行 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 锁定问题就不会出现。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-01-22 00:516307
用户头像

发布了 1008 篇内容, 共 433.0 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

天润融通工单系统:一键催单功能提升客户满意度

天润融通

《计算机组成及汇编语言原理》阅读笔记:p177-p177

codists

计算机组成及汇编语言原理

HarmonyOS next之flutter鸿蒙项目初体验

flfljh

面向教育场景的大模型 RAG 检索增强解决方案

阿里云大数据AI技术

人工智能 大模型 LLM rag PAI

GDP一直在增长,为什么钱却这么难挣

博文视点Broadview

行业分享丨延锋国际基于数据分析和AI平台的仿真工具探索

Altair RapidMiner

人工智能 数据挖掘 数据分析 AI在仿真应用 ai与cae

Altair助力著名工业电子控制系统供应商Psicontrol提升PCB开发流程效率

Altair RapidMiner

EMC 电子设计 电磁仿真 PCB开发 FEKO

AI技术在英语学习领域的应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

京东科技开发者

2024年Apache DolphinScheduler社区高光时刻总结!

白鲸开源

Apache DolphinScheduler 2024年终总结

2024年终福利 | Apache DolphinScheduler案例合集,附PDF下载

白鲸开源

Apache DolphinScheduler 大数据 开源 案例集 大数据调度

GreatSQL temp文件占用时长分析

GreatSQL

HarmonyOS next之APP 服务卡片获取 APP 内数据

flfljh

由 Mybatis 源码畅谈软件设计(九):“能用就行” 其实远远不够

京东科技开发者

白鲸开源WhaleStudio荣获2024星空奖!

白鲸开源

datafun 数据集成平台 大数据调度 白鲸开源 星空奖

淘宝APP分类API接口:开发、运用与收益全解析

科普小能手

数据挖掘 淘宝 电商 API 接口 API 测试

Elasticsearch VS Easysearch 性能测试

极限实验室

elasticsearch ES easysearch

构建AI Agent必学的4种设计模式,一文了解

Baihai IDP

程序员 AI LLMs AI Agents AI 助手

每年一问:Java日期格式化中周所在年引发的bug

白鲸开源

开源 Apache DolphinScheduler 日期 大数据调度

社区信息化管理系统(源码+文档+部署+讲解)

深圳亥时科技

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

sysin

esxi

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

京东科技开发者

VUE3与JNPF快速开发平台的完美结合

伤感汤姆布利柏

LeetCode题解:2625. 扁平化嵌套数组,递归

Lee Chen

DVWA靶场文件上传漏洞全级别通关及源码深度解析

代码忍者

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS xFusion (超聚变) 定制版

sysin

HarmonyOS next之Flutter插件支持鸿蒙系

flfljh

智慧人大综合管理平台(源码+文档+部署+讲解)

深圳亥时科技

艾卡货车救援系统(源码+文档+部署+讲解)

深圳亥时科技

CST软件如何计算天线fidelity保真度?达索代理思茂信息

思茂信息

cst cst操作 CST软件

LED和LCD的15个不同之处

Dylan

LCD1602液晶显示屏 LED LED display LED显示屏 lcd

PHP Session可能会引起并发问题_PHP_谢丽_InfoQ精选文章