2013-02-09 3 views
4

У меня возникли проблемы с хранением сессий в базе данных с помощью codeigniter.Сохранение сеансов Codeigniter в базе данных

Когда пользователь входит в систему, сеанс создается и сохраняется в базе данных. Данные заполняются в базе данных. Когда пользователь использует кнопку выхода из системы, данные сеанса опустошаются, однако сеанс все еще существует в базе данных.

Проблема заключается в том, что пользователь не использует кнопку выхода из системы, а просто закрывает веб-браузер. Данные сеанса не освобождаются, но пользователь все равно выйдет из системы. (i hava установить это в моем файле конфигурации). Сеанс должен быть уничтожен в базе данных, но это не так!

Когда пользователь возвращается в систему после нажатия кнопки «Выход», сеанс, который был создан при первом входе в систему пользователя, снова заполняется данными. Поэтому никаких проблем с этим.

Но когда пользователь заходит назад после закрытия браузера, он создает новый сеанс.

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

что-то другое, что меня смущает: когда я вхожу в систему с учетной записью, создается сеанс. Когда я выйду с этой учетной записью и войдите в систему с другой учетной записью, сессия будет сохранена в той же записи, что и другая учетная запись. Когда создаются новые записи в таблице сеансов?

Я использую версию 2.1.3 кодерификатора.

Что я делаю неправильно?

//Session config: 

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 
+0

Какая версия CodeIgniter? – FoolishSeth

+0

версия 2.1.3 кодерификатора – Arnout

ответ

3

Вы sess_expire_on_close набор для TRUE, поэтому ожидается, что это поведение, и вы обычно хотите, что в большинстве случаев. Проблема заключается в том, что при закрытии и открытии браузера создается новый файл cookie (следовательно, сеанс). Из CI session class documentation (идти на дно, где он говорит о экономии сессий в БД):

Примечание: Класс Session имеет встроенные сборки мусора, который очищает истекшие сессии, поэтому вам не нужно писать свой собственный чтобы сделать это.

Таким образом, вам не о чем беспокоиться по поводу адресации, осиротевшие сеансы будут автоматически собирать мусор из БД классом сеанса. Если вы хотите, вы можете реализовать код, чтобы очистить его через cron, но вам действительно не нужно.

Теперь, если это представляет проблему для конкретного авторизован пользователями (например, «Запомнить меня») но вы хотите сессию истекают закрытия для всех остальных, вы можете работать вокруг него вручную установить другое печенье что намного превышает ваш cookie сеанса и сопоставляет элемент в нем в вашей сессии. Это позволяет вам выяснить, кто был пользователем, и восстановить сеанс, если он должен волноваться на них. Есть немного больше об этом in this answer в несколько смежных вопросах.

Смежные вопросы