1

我对 CodeIgniter 的购物车类有一个非常奇怪的行为。我已经在我的数据库中设置了 ci_session 表,并且已经将 sess_use_database 更改为 TRUE。

发生的事情是,当我将商品添加到购物车时,一切都很好:我看到我的商品总数计数器上升,一切都好。当我第一次进入购物车页面时,我会在那里看到我所有的商品,它们应该在哪里。我还提供了删除项目按钮和一个空购物车按钮。奇怪的事情发生在这里:当我点击删除一个项目时,页面刷新(由于我认为重定向)但项目仍然存在!然后,如果我手动刷新购物车页面,我会看到我删除的同一个项目消失了。就像,当我使用重定向时,我得到了页面的缓存,而不是带有新信息的实际页面。

无论如何,这里有一些链接:

尝试从该页面添加一些项目: http://www.pantanishoes.it/Niko/index.php/store/linea/urban 单击每个项目描述底部的黑色大按钮。

然后尝试转到顶部菜单上的 Carrello 并尝试删除一些项目或 Svuota(它执行简单的 destroy()),看看会发生什么!任何帮助将不胜感激!谢谢指教!

这是购物车的一些代码。

function add() {

    $item = $this->store_model->get_item($this->input->post('id'));

    $data = array(
        'id' => $this->input->post('id'),
        'name' => $item->modello,
        'qty' => $this->input->post('qty'),
        'price' => $item->prezzo,
        'options' => array(
            'taglia' => $this->input->post('taglia'),
            'linea' => $item->linea,
            'modello' => $item->modello,
            'foto' => $item->foto1
            )
    );

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

    $linea = str_replace(' ', '-', $item->linea);

    redirect('/store/linea/' . $linea . '/', 'location');
}

function remove() {
    $rowid = $this->uri->segment(3);
    $data = array(
        'rowid' => $rowid,
        'qty' => 0
    );

    $this->cart->update($data);
    redirect('cart');
}

function destroy() {
    $this->cart->destroy();
    redirect('cart');
}

在本地主机上一切都很好!当我将网站加载到服务器时,它开始出现此问题。真的真的很奇怪!我缺少一些配置吗?

Chrome 说:请求 URL: http: //www.pantanishoes.it/Niko/index.php/cart/remove/fb1b4a9869de6f24aa620e2307192d93 请求方法:GET 状态代码:302 临时移动(来自缓存)

4

2 回答 2

1

好了朋友们。所以我终于修复了这个小错误,感谢我的一个使用 CI 一段时间的朋友的帮助。正如你们中的一些人所猜测的,这是一个缓存问题。您唯一需要做的就是像这样强制 PHP 标头:

header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); 
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); 
header( 'Cache-Control: no-store, no-cache, must-revalidate' ); 
header( 'Cache-Control: post-check=0, pre-check=0', false ); 
header( 'Pragma: no-cache' );

您可以在控制器中执行私有函数,使其无法从外部访问,并在您的相关添加、删除、销毁方法中调用它。私有函数必须如下所示:

private function _set_headers() {
    header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); 
    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i(worry)' ) . ' GMT' ); 
    header( 'Cache-Control: no-store, no-cache, must-revalidate' ); 
    header( 'Cache-Control: post-check=0, pre-check=0', false ); 
    header( 'Pragma: no-cache' );
}

你在其他函数中调用它,如下所示:

$this->_set_headers();

请记住,这仅适用于类的范围。您不能在其他控制器中调用此函数,也不能从范围外访问它,因为它不是公共的。

谢谢大家!!

于 2013-05-06T16:47:09.517 回答
0

我建议你试试这个:

redirect('/store/linea/' . $linea . '/', 'refresh');

代替

 redirect('/store/linea/' . $linea . '/', 'location');

重定向后您的页面似乎仍处于缓存状态

娱乐活动

于 2013-05-05T14:39:46.917 回答