2013-08-26 67 views
0

我想用CodeIgniter開發一個小型網上商店。要存儲這些項目,我使用Cart庫。大多數時候,一切都很好。但是,有時在重定向後,購物車的內容會丟失。CodeIgniter:重定向後購物車內容會丟失

我在網上發現了一些修復程序,但沒有一個適用於我的情況。這裏是我的設置:

  • 我使用DB存儲會話
  • 我不使用AJAX
  • 沒有在會話cookie

這裏的名稱沒有下劃線是例如刷新:

public function add_item() { 
    $item_id = $this->input->post('item'); 

    // Query database 
    $item = $this->model->find_item($item_id); 

    // Rewrite model info 
    ... 

    $data = array(
     'id'  => 'item-' . $item['id'] . '-size-' . $item['sizes'][$i]['id'], 
     'qty'  => $qty, 
     'price' => $item['sizes'][$i]['price'], 
     'name' => $item['name'], 
     'options' => array('short_name' => $item['short_name']) 
    ); 

    $this->cart->insert($data); 

    usleep(10000); 
    redirect('shop'); 
} 

回答

1

我終於找到了答案,以我的問題,這要歸功於這個問題:CodeIgniter Cart and Session lost when refresh page

問題是存儲在會話中的數據變得太大。 CodeIgniter將所有數據存儲在cookie中,限制爲4kB。我的錯誤是認爲,如果我使用DB來存儲會話,我可以避免這種限制。 Apparently,由於安全原因,CodeIgniter「僅」將會話保存在數據庫中。 Cookie中仍有大量數據。

現在,我使用一個名爲Native session的庫。我在這裏找到它:https://github.com/EllisLab/CodeIgniter/wiki/Native-session

我只是把文件放在'application/libraries'中,將第一個函數改名爲'__construct()',將它添加到自動導入中並用'native_session'替換了所有'session'標籤我的代碼。我還必須更改Cart類,因爲它使用的是CodeIgniter的原始會話。