【问题标题】:Popular reasons for inconsistent memcache session in phpphp中memcache会话不一致的流行原因
【发布时间】:2014-03-13 14:04:18
【问题描述】:

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

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

【问题讨论】:

    标签: php session memcached


    【解决方案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)

    在这种情况下,您将遇到会话不一致,因为请求 A 将覆盖请求 B 所做的更改。

    【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2015-10-07
    • 2014-01-29
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多