Laravel4 -会话在同时请求时消失


Laravel4 - Sessions are disappearing on simultaneous requests

我有一个购物篮,出于各种原因,我将内容保存为单独的会话。

问题是,当我发送同步请求到以下添加函数,Laravel的丢失以前的,不相关的/不同的会话,并保持最后一个,但它的工作很好,如果我等待前一个进程完成。

我认为问题是Laravel的会话管理方法,它试图将所有内容保存在数据库中的单个文件或单个字段中。如果是这样,我没有看到任何解决方案,但这是代码;

public function add($param1, $param2, $param3, $param4){
    sleep(2);
    $results = DB::select("CALL ...(?, ?, ?, ?)", array($param1, $param2, $param3, $param4));
    $sessionName = "basket-item-$param1-$param2-$param3-$param4";
    $selectionIDs = array();
    $status = null;
    if(!Session::has($sessionName)){
        if($results){
            foreach($results as $result){
                $selectionIDs[] = $result->selection_id;
            }
        }
        if($selectionIDs) Session::put($sessionName, $selectionIDs);
        $status = 'new';
    }
    return array('count' => $this->count(), "has_session_this" => Session::has($sessionName), 'session_name' => $sessionName, 'status' => $status);
} 

Count为count, has_session_thisSession::has($key)的响应,session_name$key的响应

ADD TO BASKET RESPONSE : Object { count=1, has_session_this=true, session_name="basket-item-1-256-7894628-21494", more...}
ADD TO BASKET RESPONSE : Object { count=2, has_session_this=true, session_name="basket-item-1-256-14834686-21494", more...}
ADD TO BASKET RESPONSE : Object { count=3, has_session_this=true, session_name="basket-item-1-256-21132688-21494", more...}
ADD TO BASKET RESPONSE : Object { count=4, has_session_this=true, session_name="basket-item-1-256-3500057-21494", more...}

这是预期的结果,如果我不等待响应;

ADD TO BASKET RESPONSE : Object { count=1, has_session_this=true, session_name="basket-item-1-256-7894628-21494", more...}
ADD TO BASKET RESPONSE : Object { count=1, has_session_this=true, session_name="basket-item-1-256-14834686-21494", more...}
ADD TO BASKET RESPONSE : Object { count=1, has_session_this=true, session_name="basket-item-1-256-21132688-21494", more...}
ADD TO BASKET RESPONSE : Object { count=1, has_session_this=true, session_name="basket-item-1-256-3500057-21494", more...}

看来你的逻辑出了问题。与会话无关。

如果前面的功能没有完成-则计数从1开始。只有当前一个功能完成时,计数才会增加。

但是你使用的是$this->count() -所以当你启动这个函数时,它看起来可能会得到当前会话对象的计数-而不是更新的计数。

如果你想确保一个正确的计数增量-你需要使用

Cache::increment('key')

你的缓存驱动程序需要Memcache或Redis为它的工作。