我正在尝试使用CodeIgniter开发一个小型网上商店。要存储项目,我使用Cart库。大多数时候,一切都很好。但是,有时重定向后购物车的内容会丢失。
我在网上找到了一些修复程序,但在我的案例中没有一个可行。这是我的设置:
以下是刷新示例:
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');
}
答案 0 :(得分:1)
由于这个问题,我终于找到了问题的答案:CodeIgniter Cart and Session lost when refresh page
问题在于会话中存储的数据太大了。 CodeIgniter将所有数据存储在cookie中,限制为4kB。我的错误是认为,如果我使用数据库存储我的会话,我可以避免这个限制。 Apparently,CodeIgniter出于安全原因“仅”保存数据库中的会话。 cookie中仍然有很多数据。
现在,我使用一个名为Native session的库。我在这里找到了它:https://github.com/EllisLab/CodeIgniter/wiki/Native-session
我只是将文件放在'application / libraries'中,将第一个函数重命名为'__construct()',将其添加到autoimport并在我的代码中用'native_session'替换所有'session'标签。我还必须更改Cart类,因为它使用的是CodeIgniter的原始会话。