CodeIgniter购物车奇怪的行为

时间:2013-05-04 08:12:11

标签: php codeigniter caching redirect shopping-cart

我对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');
}

在localhost上一切都很棒!当我将网站加载到服务器时,它开始出现这个问题。真的很奇怪!是否有一些我缺少的配置?

Chrome说: 请求网址:http://www.pantanishoes.it/Niko/index.php/cart/remove/fb1b4a9869de6f24aa620e2307192d93 请求方法:GET 状态代码:302暂时移动(从缓存中)

2 个答案:

答案 0 :(得分: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();

请记住,这只适用于班级的范围。您无法在其他控制器中调用此函数,也无法从范围外访问该函数,因为它不公开。

谢谢大家!!

答案 1 :(得分:0)

我建议你试试这个:

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

而不是

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

在重定向

之后,您的页面似乎仍然被缓存

Spero che funzioni