Laravel4 - 同步请求中的会话正在消失

时间:2014-06-05 12:15:31

标签: php session laravel-4

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

问题是,当我同时向以下添加功能发送请求时,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);
} 

计数是项counthas_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 个答案:

答案 0 :(得分:0)

看起来你的逻辑有问题。与会话无关。

如果之前的功能尚未完成 - 那么计数从1开始。只有当前一个功能完成时,计数才会增加。

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

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

Cache::increment('key')

你的缓存驱动程序需要是Memcache或Redis才能工作。 See docs for more info