0

我正在尝试使用 CodeIgniter 开发一个小型网上商店。为了存储项目,我使用Cart库。大多数时候,一切都很好。但是,有时购物车的内容会在重定向后丢失。

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

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

1 回答 1

1

由于这个问题,我终于找到了我的问题的答案:CodeIgniter Cart and Session lost when refresh page

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

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

我只是将文件放在“应用程序/库”中,将第一个函数重命名为“__construct()”,将其添加到自动导入中,并用我的代码中的“native_session”替换所有“会话”标签。我还必须更改 Cart 类,因为它使用的是 CodeIgniter 的原始会话。

于 2013-08-27T21:31:21.613 回答