Я использую 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);
}
}
}
}
попробовали переименовать имя файла cookie сеанса, удалив подчеркивание? – tomexsans
@tomexsans: Я сделал это, но не повезло –
как вы пользуетесь телегой? может захотеть опубликовать ваш код здесь – tomexsans