假设我们有一个用户变量$_SESSION['variable']
,可以在用户访问页面时修改或不修改。
假设相同用户打开了多个浏览器窗口,并以某种方式同时向服务器发出导致会话变量更改的请求。
问题:
服务器如何“排队”这些更改,因为它们的目标是 相同的变量?这里是否存在服务器错误的可能性?
是否有办法“锁定”会话变量以进行读/写 在更改之前要执行某种状态检查 值?
修改 (感谢Unheilig的清理工作)
关于“排队”,我感兴趣的是如果两个请求同时到达会发生什么:
将X更改为1
将X更改为2
我知道这似乎不是一个真实世界的场景,但在设计某些东西时我才想到它。如果系统允许来自同一用户的过多并发请求,则可能会出现问题。
答案 0 :(得分:4)
每次单独的PHP会话都会在调用session_start()与调用session_write_close()或请求结束之间“锁定”,以较早者为准。
大部分时间你都不会注意到这种行为。
但是,如果您的网站确实发出了许多并发请求*,那么这些请求似乎会按照先到先得的顺序排队。
要清楚;在典型的Apache / PHP设置中,您的请求将同时进入服务器并启动您的PHP执行。 session_start()调用将阻塞/暂停/等待/队列,因为它正在等待获取会话文件上的文件锁(或类似取决于你的session_hander)。
因此,增加请求吞吐量或减少等待请求:
希望有所帮助。
学家
* Ajax& Frame / iFrame繁重的应用程序经常出现这个问题。