【问题标题】:CodeIgniter Shopping Cart Strange BehaviourCodeIgniter 购物车奇怪行为
【发布时间】:2013-04-28 15:15:43
【问题描述】:

我对 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 说: 请求网址:http://www.pantanishoes.it/Niko/index.php/cart/remove/fb1b4a9869de6f24aa620e2307192d93 请求方法:GET 状态码:302 已临时移动(来自缓存)

【问题讨论】:

  • 您使用的是codeigniter缓存还是某种缓存方法?因为如果我在浏览器上禁用缓存它会起作用,如果启用缓存它会返回与您描述的相同的页面。所以 prova a vedere se stai cachando (non "cacando") qualcosa :D

标签: php codeigniter caching redirect shopping-cart


【解决方案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();

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

谢谢大家!!

【讨论】:

    【解决方案2】:

    我建议你试试这个:

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

    而不是

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

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

    游戏机

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2011-12-04
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多