[英]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是項目count
, has_session_this
是Session::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.