Есть ли какая-либо известная ошибка в библиотеке сеансов 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