刷新页面时CodeIgniter Cart和Session丢失

时间:2013-06-13 09:30:24

标签: codeigniter session codeigniter-2 shopping-cart cart

我正在使用CodeIgniter v2.1.3并且在使用CI Cart和Session时遇到问题。当我将一个元素插入Cart时,一切都很顺利。但是当我刷新页面时,所有已保存的购物车项目都消失了。使用Session Class时发生了同样的问题。

但是我的本地主机上的一切都运行良好。问题恰好发生在我的服务器上。

现在我的服务器上有一些网站,他们对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);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用数据库来存储会话数据?根据您的设置,我猜是因为您的数据很大,可容纳4KB的cookie。