我正在使用 CodeIgniter v2.1.3 并且在使用 CI Cart 和 Session 时遇到问题。当我将一个元素插入购物车时,一切都很好。但是当我刷新页面时,所有保存的购物车项目都消失了。当我使用会话类时也发生了同样的问题。
但是在我的本地主机上一切正常。问题只是发生在我的服务器上。
我的服务器上现在有一些网站,它们对 Session 没有任何问题。所以我猜它一定是由CI引起的。
这是 application/config/config.php 中的会话配置:
$config['sess_cookie_name'] = 'blowup_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions1';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
我试图打印 session_id 但它什么也没返回。所以我猜 Session 类没有生成任何 session_id。尝试使用 session_start() 手动启动会话,生成了 session_id。
我还尝试使用 $_SESSION 保存一些东西,它们被保存没有任何问题。
这是否意味着 CI_Session 和 Cart 库没有自动加载?
我该如何解决?或者是否有任何 Session 类可以取代当前的?
PS:我的服务器正在运行 CentOS 5、PHP v 5.2.17、Apache 2.2.23 和 MySQL 5.0.96
更新
下面是我在 Controller 中用来将商品添加到购物车的函数。数据 ($params) 通过 AJAX 请求(使用 jquery AJAX)发布。返回的数据是一个 HTML 视图。
public function add_to_cart(){
$this->layout->set_template('ajax');
if ($this->is_post()){
$params = $this->get_all_post_data();
//Debug::dump($this->cart);die;
if (isset($params['id']) && (int)$params['id']>0){
$product = $this->_product_model->get_record_by_id((int)$params['id']);
if (!is_null($product)){
if (count($this->cart->contents())>0){
foreach ($this->cart->contents() as $item){
if ($item['id']==$product->id){
$data = array('rowid'=>$item['rowid'],'qty'=>++$item['qty']);
$this->cart->update($data);
}else{
$data = array('id'=>$product->id,'qty'=>1,'price'=>$product->price,'name'=>$product->id,'options'=>array('image'=>$product->thumb,'product_name'=>$product->title));
$this->cart->insert($data);
}
}
}else{
$data = array('id'=>$product->id,'qty'=>1,'price'=>$product->price,'name'=>$product->id,'options'=>array('image'=>$product->thumb,'product_name'=>$product->title));
$this->cart->insert($data);
}
$this->session->set_userdata(array('test'=>'Session test'));
$this->layout->load('cart/topmenu_cart', $this->data);
}
}
}
}