2013-06-13 2 views
1

Я использую CodeIgniter v2.1.3 и имею проблему с использованием CI Cart и Session. Когда я вставляю элемент в корзину, все пошло нормально. Но когда я обновляю страницу, все сохраненные элементы корзины исчезли. Та же проблема возникла, когда я использую класс сеанса.CodeIgniter Cart и Session потеряны при обновлении страницы

Но все работает хорошо на моем локальном хосте. Проблема только на моем сервере.

На моем сервере есть несколько сайтов, и у них нет проблем с сеансом. Поэтому я предполагаю, что это должно быть вызвано CI.

Вот configuarations сессии в приложении/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

ОБНОВЛЕНО

Ниже функция я использую в контроллере, чтобы добавить в корзину. Данные ($ 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); 
       } 
      } 
     } 
    } 
+0

попробовали переименовать имя файла cookie сеанса, удалив подчеркивание? – tomexsans

+0

@tomexsans: Я сделал это, но не повезло –

+0

как вы пользуетесь телегой? может захотеть опубликовать ваш код здесь – tomexsans

ответ

4

Вы пытались использовать базу данных для хранения данных сеанса вместо этого? Основываясь на ваших настройках, я думаю, потому что ваши данные будут большими для хранения в cookie 4 КБ.

+1

Спасибо SOOOO за этот ответ !! – SomethingOn