50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

Android 构建工具--AAPT2源码解析(一)

vivo互联网技术

打包APK 源码剖析 Android端

劲爆!java微信小程序开发教程视频,Java学习路线指南

Java 程序员 后端

云栖大会:《永不止步的云上创新》——蒋江伟

代码 科技革命 计算 云 原生云 CTO 云栖大会

4个实验,彻底搞懂TCP连接的断开

捉虫大师

TCP

初级Java面试题大全,极客邦科技面试,linux架构学习视频

Java 程序员 后端

鸿蒙轻内核源码分析:异常钩子模块系统中断异常,如何转储异常信息

华为云开发者联盟

鸿蒙 内存 存储 函数 异常钩子

分享一点面试小经验,2021年互联网大厂Java笔经

Java 程序员 后端

别再说自己不会JVM虚拟机了,35岁技术人如何转型做管理

Java 程序员 后端

助你面试一臂之力,linux基础教程第2版课后思考题答案,阿里巴巴Java面试题

Java 程序员 后端

分享复习经验和后台开发面经,阿里架构师深入讲解Java开发

Java 程序员 后端

十年Java编程开发生涯,未来教育计算机二级java激活码,面试官突击一问

Java 程序员 后端

写给即将正在找工作的Java攻城狮,5分钟搞定

Java 程序员 后端

分享Java资深架构师的成长之路,Java面试常见问题及回答技巧

Java 程序员 后端

区块链交易隐私如何保证?华为零知识证明技术实战解析

华为云开发者联盟

区块链 金融 零知识证明 同态加密 交易隐私

十分钟带你看懂Netty如何实现C-S,美团Java开发面试

Java 程序员 后端

华为财经2021春招面试,尚硅谷springboot笔记,最全Java知识总结

Java 程序员 后端

分享Java资深架构师的成长之路,今日头条面试经历

Java 程序员 后端

Tapdata 携手精诚瑞宝,共拓 Real Time DaaS 蓝海市场

tapdata

数据库

十分钟带你回顾Spring常问的知识点,springcloud面试题汇集与答案

Java 程序员 后端

华为Java面试题及答案,java开发实例教程课后答案石磊,查漏补缺

Java 程序员 后端

分享一波阿里、字节、腾讯、美团等精选大厂面试题,Java面试题整理

Java 程序员 后端

分享我在Java开发中走的一些弯路,不同层级的Java开发者的不同行为

Java 程序员 后端

十年Java编程开发生涯,尚学堂网易上的中级,推荐一个GitHub项目

Java 程序员 后端

华为大神花费5个月打造的这份714页学习笔记系列,面试看这个就够了

Java 程序员 后端

DoS?DDoS?这件事要从另一个D说起……

郑州埃文科技

网络安全 DOS攻击 IP定位

分享一点面试小经验,2021吊打面试官系列

Java 程序员 后端

声纹识别帮你守住钱袋子,聊一聊证券行业里的人工智能

Zilliz

AI 向量检索 Milvus 向量

别再说自己不会了!极客时间破解版没用,Redis成神之路电子版教程已问世

Java 程序员 后端

准备Java面试?中公教育java讲师,死磕原理

Java 程序员 后端

分享一次面试经历,享学课堂java架构师课程,【高级Java架构师系统学习】

Java 程序员 后端

别再说你不会!linux服务器搭建教程视频百度网盘,nginx入门书籍

Java 程序员 后端

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