php中不一致的memcache会话的流行原因

时间:2014-03-13 14:04:19

标签: php session memcached

我的$_SESSION变量中存在不一致,该变量定义为保存在memcache中。会话值之间混淆的常见原因是什么?

我在脚本开头使用session_start(),但有时$_SESSION变量设置为旧版本。

1 个答案:

答案 0 :(得分:1)

它可能是会话锁定问题。当PHP处理请求时,正常流程会阻止会话文件读取/写入(只有此进程才能读取/修改此文件)。

所以当另一个请求(比如AJAX请求)必须等到第一个请求完成并解锁会话时。

使用memcache会话锁定默认情况下可能已禁用,因此情况如下:

  1. AJAX请求A来并读取会话文件(STATE X)
  2. AJAX请求B来读取会话文件(STATE X)
  3. AJAX请求B结束并存储修改后的会话(将状态X更改为Y)
  4. AJAX请求A结束并存储修改后的会话(将状态X更改为Z,禁止状态Y)
  5. 在这种情况下,您将遇到会话不一致,因为请求A将覆盖请求B所做的更改。