为什么有些数据没有使用memcached存储在Session中?

时间:2015-04-02 15:06:11

标签: php session laravel memcached

我正在尝试使用Laravel5和Memcached将一些数据写入会话。没有ajax它工作正常,但我需要异步存储多个值。

这是我的示例javascript代码:

var i = 1;

for (i; i < 11; i++) {
    var data = {
        id: i,
        data: 'data-' + i
    }

    $.ajax({
        url: 'api/data',
        method: 'POST',
        data: data
    });
}

这是我的示例php代码:

post('/api/data', function() {
    $request = \Request::all();

    \Session::put('key-'.$request['id'], $request['data']);
});

当我触发这个js代码一次时,我没有将所有10个值写入会话

在js代码完成后输出dd(\Session::all())

array:8 [▼
  "_token" => "WUv8naiJT9PEHpG4b4moZyUcTfxy4YHhdBiluB7R"
  "_previous" => array:1 [▶]
  "flash" => array:2 [▶]
  "key-2" => "data-2"
  "key-5" => "data-5"
  "key-6" => "data-6"
  "key-7" => "data-7"
  "key-9" => "data-9"
]

如果我多次触发js代码,我会存储所有10个值。

1 个答案:

答案 0 :(得分:0)

$ .ajax call是asynchrone。

所以有些请求几乎同时完成。这就是你在会话中随机更新数据的原因

取决于session_write最后一个请求并读取...

这是一个只有2个请求的时间表:

请求1个读取会话 请求2读取会话 请求1写会话 请求2写会话

只有会话数据中的

:key-2 =&gt;数据-2