假设我们有一个用户变量$_SESSION['variable']
,它可以在用户访问页面时被修改,也可以不被修改。
问题:
服务器如何"排队"这些更改,因为它们是针对的相同的变量?这里有可能出现服务器错误吗?
是否有一种方法来"锁定"会话变量的读/写为了在更改其属性之前实现某种状态检查价值吗?
编辑(感谢Unheilig清理)
关于"排队",我感兴趣的是如果两个请求同时到达会发生什么:
将X改为1
将X改为2
我知道这看起来不像一个现实世界的场景,但它只是在我设计东西的时候出现在我的脑海里。如果系统允许来自同一用户的太多并发请求,这可能会成为一个问题。
每个单独的PHP会话在调用session_start()和调用session_write_close()或请求结束之间被'锁定',以较早的为准。
大多数时候你不会注意到这个行为。
然而,如果你的站点确实有很多并发请求*,那么这些请求就会按照先到先得的顺序排队。
要清楚;在典型的Apache/PHP设置中,您的请求将传入服务器并同时启动PHP执行。session_start()调用将阻塞/暂停/等待/队列,因为它正在等待获得会话文件的文件锁(或类似的取决于您的session_handler)。
增加请求吞吐量或减少等待请求:
- 尽快打开和关闭会话(session_start(), do_work(), session_write_close());
- 确保你没有在长时间工作的请求上打开会话(访问第三方api,生成或操纵文档,运行长数据库查询等)。除非绝对必要。
- 尽可能避免触碰会话。尽可能多地休息。
- 在应用程序的客户端尽可能优雅地管理请求的排队和退出
希望对你有帮助。
j .
* Ajax,Frame/iFrame较多的应用程序经常出现这个问题。