CodeIgniter:重定向后购物车内容丢失


CodeIgniter: Cart content gets lost after redirect

我正在尝试用CodeIgniter开发一个小型网店。为了储存物品,我使用购物车库。大多数时候,一切都很顺利。然而,有时购物车的内容会在重定向后丢失。

我在网上找到了一些修复程序,但在我的情况下都不起作用。这是我的设置:

  • 我使用数据库存储会话
  • 我不使用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');
}

由于这个问题,我终于找到了问题的答案:刷新页面时CodeIgniter Cart和Session丢失

问题是存储在会话中的数据太大了。CodeIgniter将所有数据存储在cookie中,cookie限制为4kB。我的错误是认为,如果我使用DB来存储我的会话,我可以避免这个限制。显然,CodeIgniter"仅"出于安全原因将会话保存在数据库中。cookie中仍有大量数据。

现在,我使用一个名为Native session的库。我在这里找到它:https://github.com/EllisLab/CodeIgniter/wiki/Native-session

我只是把文件放在"application/libraries"中,把第一个函数重命名为"__construct()",把它添加到autoimport中,并用代码中的"native_session"替换了所有的"session"标记。我还不得不更改Cart类,因为它使用了CodeIgniter的原始会话。