Есть ли какая-либо известная ошибка в библиотеке сеансов CodeIgniter 2.1.0? Почему меня выгоняют?
Я работаю над сайтом, созданным с помощью CodeIgniter 2.1.0.
Я заметил, что иногда, когда я перезагружаю страницу пару раз или открываю пару страниц очень быстро или когда у меня есть ошибка в коде (эти ошибки не связаны с сеансами), я выхожу из системы.
Этот сайт использует библиотеку Ion_authand для идентификации:
public function logged_in()
{
$identity = $this->ci->config->item('identity', 'ion_auth');
return (bool) $this->ci->session->userdata($identity);
}
Есть ли ошибка или что-то, о чем я должен знать?
$config['sess_cookie_name'] = 'cisession';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'cisession';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
На этом веб-сайте сеансы обновляются практически на каждой странице.
Ответы
Ответ 1
Вот что я нашел:
В библиотеке сеансов CodeIgniter обнаружена ошибка, которая быстро разрушает сеанс.
Здесь вы можете найти больше об этой ошибке:
https://github.com/EllisLab/CodeIgniter/issues/154
Эта ошибка все еще существует в последней стабильной версии 2.1.3.
Я исправил это, заменив мою библиотеку сеансов на одну из CI3-DEV из GitHub:
https://github.com/EllisLab/CodeIgniter/blob/b211adee89f5fd2192051e9c0826146bd150f469/system/libraries/Session.php
И добавив длинную sess_expiration и sess_time_to_update в мою конфигурацию... мои 86400 и 86500.
Ответ 2
CodeIgniter сохраняет данные сеанса в файлах cookie. Если данные сеанса имеют специальный символ, который отключает куки файл, сеанс также уничтожается.
Он также создает еще немного проблем с ограничением размера. Cookie может сохранять ограниченный размер данных в зависимости от браузера. Если вы попытаетесь сохранить больше данных в сеансе CodeIgniter и как CodeIgniter попытается сохранить его в cookie, он может не сохранить больше этого предела.
Также, поскольку cookie отправляется по сети, он излишне добавляет трафик в сети. Все данные сеанса не должны сохраняться в файле cookie.
Лучше использовать собственную библиотеку сеансов. Он использует собственный сеанс PHP.
https://github.com/EllisLab/CodeIgniter/wiki/Native-session
или
https://github.com/EllisLab/CodeIgniter/wiki/PHPSession
Вы можете сравнить оба.
Пожалуйста, обратитесь к документации сеанса CodeIgniter, чтобы узнать, как CodeIgniter хранит данные сеанса.
http://ellislab.com/codeigniter/user-guide/libraries/sessions.html