2012-04-12 4 views
0

Браузер успешно получил cookie один раз (как? Когда? Я действительно не могу сказать. Я просто могу сказать, что в определенное время я понял, что мой сайт не был больше работает в хроме). Теперь хром продолжает показывать: «У этого сайта нет куки» в инструменте разработки.CodeIgniter: сеанс не работает в Google Chrome

Он отлично работает в Explorer/Firefox/сафари и т.д ...

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

Вот мой конфиг (таблица базы данных существует, работает, и обычно печенье зашифровано)

$config['sess_cookie_name']  = '[mydomain]sessions'; 
$config['sess_expiration']  = 60*60*24*7; // one week 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = '[mydomain]sessions'; 
$config['sess_match_ip']  = TRUE; 
$config['sess_match_useragent'] = FALSE; 
$config['sess_time_to_update'] = 300; 

Вот Cookie CONFIG

$config['cookie_prefix'] = ""; 
$config['cookie_domain'] = "[mydomain.com]"; 
$config['cookie_path']  = "/"; 
$config['cookie_secure'] = FALSE; 

Когда пользователь входит в систему, он делает:

$query = $this->db->get_where('user', array('id' => $logged_in_user_id)); 
$row = $query->row(); 
$this->session->set_userdata('user_id', $row->user_id); 
redirect(base_url(), 'location'); 

Когда пользователь выходит из системы, он:

$this->session->sess_destroy(); 
redirect(base_url(), 'location'); 

Это просто, и я думаю, что так оно и должно быть сделано? любая идея, почему она не работает в chrome, но отлично работает в firefox/explorer/safari?

+0

вы установили sess_use_database в true, чтобы ваш сеанс поддерживался через базу данных не через файлы cookie –

ответ

1

Попробуйте добавить точку к этой линии:

$config['cookie_domain'] = ".[mydomain.com]"; 

Моя конфигурация является тем же самым, и он работает с Google Chrome, но у меня есть эти те разные:

$config['sess_expiration']  = 86400; 
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 

Я надеюсь, что это работает: -)

+0

Спасибо за предложение jonaypelluz. Я попытался, и это не сработало. Я оставил файл cookie_domain пустым, и теперь он работает. Браузер правильно установил имя домена. Похоже, он должен обрабатываться браузером ...? – Simmoniz

0

Обычно вы (ну в прошлом у меня есть) разрешаете (d) его продление срока действия сеанса, но я вижу, что ваш уже установлен на одну неделю. Попробуйте сделать его короче? Например:

$config['sess_expiration'] = 8600; 

В качестве альтернативы, вы можете попробовать отключить шифровать печенье, как я только что прочитал на CI форумах кто-то решен вопрос с помощью этого метода:

$config['sess_encrypt_cookie'] = FALSE; 

Надежда Я помог , Дайте мне знать, как это пойдет вам :)

0

Добавить ob_start() поверх библиотеки сеансов.

ob_start(); 
$this->load->library('Session'); 

И добавить ob_clean() в сеансе разрушающей части

$this->load->driver('cache'); 
$this->session->sess_destroy(); 
$this->cache->clean(); 
ob_clean(); 
0

Перейти к Config и просто заменить это, если вы используете на локальной системе:

$config['cookie_prefix'] = 'your_prefix'; 
$config['cookie_domain'] = 'localhost'; 
$config['cookie_path']  = '/folder_name/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 

Или, если вы используете его на сервере просто замените его как:

$config['cookie_domain'] = 'localhost'; 
to 
$config['cookie_domain'] = '.localhost'; 

надеюсь, это вам поможет.