NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:515815
用户头像

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

关注

评论

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

员工提出离职就消极怠工怎么办?

石云升

员工离职 职场经验 管理经验 6月日更

花了60天的时间肝出了这些spring,jvm,并发编程等学习笔记,春暖花开再战大厂!

Java架构师迁哥

又到一年“粽子节”,快来测测你包的粽子颜值几分

华为云开发者联盟

端午节 华为云 modelarts 粽子

从零开始学习3D可视化之场景层级(2)

ThingJS数字孪生引擎

大前端 可视化 数字孪生

【得物技术】浅尝UI自动化之Airtest实践

得物技术

自动化 测试 UI 自动化测试 测试落地

5分钟速读之Rust权威指南(二十一)闭包

wzx

rust

【FlinkSQL】Flink SQL Query(三)- Join

Alex🐒

flink 翻译 FlinkSQL flink1.13

WWDC21: Swift 5.5 新特性解读

阿里巴巴大淘宝技术

swift WWDC21

Webpack 简介

编程三昧

JavaScript 大前端 Node webpack 构建工具

字节跳动Java岗6月9号一面经验分享

北游学Java

Java 字节跳动 面试

书山有路,学海无涯|靠谱点评

无量靠谱

极狐(GitLab)开课了!实践进阶五步走,助你成为DevOps专家

极狐GitLab

DevOps

阿里大佬离职带出内网专属“高并发系统设计”学习笔记

Java架构师迁哥

本来无一物,何处惹尘埃|靠谱点评

无量靠谱

动手实践,Linux安装php-vld全过程实录

架构精进之路

插件 6月日更 笔记分享

10大流行软件测试工具

百度开发者中心

测试工具

并发编程-AQS介绍和原理分析(上)

追风少年

并发编程 AQS

Linux系统日常定位常用指令

正向成长

linux命令

公安合成作战指挥系统解决方案,警务实战指挥系统

Boss直聘转发超90W次,Java面试突击手册 火遍全网,却遭封杀

Java架构师迁哥

股价预测的基本思路(1)

Qien Z.

6月日更 量化投资 股价预测

亮相智源大会,字节跳动自研同传系统的技术实现

字节跳动技术团队

百分点科技助力中国环境监测总站“生态环境质量会商平台”上线

百分点大数据团队

【案例】星环科技助力华夏基金大数据平台建设

星环科技

干货|一款实用iOS云真机的技术架构是如何搭建的?

ios

网络攻防学习笔记 Day41

穿过生命散发芬芳

网络攻防 6月日更

百分点数据科学实验室:烟草行业市场信息采集数据质量评估体系研究探索

百分点大数据团队

教学相长,物联网赋能教育数字化!

IoT云工坊

人工智能 物联网 智慧校园 智慧教室 智慧操场

高并发场景创建JedisPool有哪些注意事项?

BUG侦探

并发 Jedis commons-pool

洞察 | 企业数字化转型费用高昂?低代码“骨折”给你!

优秀

低代码

C++内存访问错误检测

正向成长

内存泄露 内存溢出 Asan

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