簡體   English   中英

Laravel4-會話在同時請求時消失

[英]Laravel4 - Sessions are disappearing on simultaneous requests

我有一個購物籃,出於各種原因,我將內容保留為單獨的會話。

問題是,當我將同時的請求發送到以下add函數時,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是項目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開始。只有/當先前的功能完成時,計數才會增加。

但是您使用的是$this->count() -因此,當您啟動該函數時,它似乎正在獲取當前會話對象的計數-而不是更新的計數。

如果要確保正確的計數增量-您需要使用

Cache::increment('key')

並且您的緩存驅動程序必須是Memcache或Redis,它才能正常工作。 有關更多信息,請參閱文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM