2013-12-03 2 views
1

Я установил свой конфиг, чтобы завершить сеанс при закрытии, и использовал таблицу базы данных, содержащуюся в руководстве CI, для хранения сеансов.CodeIgniter - запись сеанса, не удаленная из базы данных (CI - 2.1.4)

Но когда я закрываю браузер, данные сеанса по-прежнему сохраняются в базе данных. Меня волнует захват сеанса; запись остается в базе данных (то есть userdata: loggedin == true), и пользователь может просто установить свой собственный сеанс с этим значением и выключить их.

Почему запись в базе данных не удаляется при закрытии браузера, когда пользователь не нажимает кнопку выхода, но закрывает окно своего браузера?

мои настройки конфигурации:

$config['sess_cookie_name']  = 'cisess'; 
$config['sess_expiration']  = 0; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'usersess'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

ответ

0

Session угон является довольно маловероятно. Кому-то нужен доступ к вашей базе данных (которая полагается на вас для ее защиты), также нужен один и тот же пользовательский агент и подделка IP. Не говоря уже о том, что им нужна точная копия файла cookie пользователя, который требует доступа к браузеру пользователей на своем компьютере.

Также вы установили sess_expiration равным 0, что означает, что он никогда не истекает. Установите его в 1 и посмотрите, как он выполняется.

РЕДАКТИРОВАТЬ: Не обращайте внимания на то, чтобы его можно было ввести в систему, а затем оно истекло. Извиняюсь за это. Попробуйте установить его на более низкий временной интервал, хотя, может быть, около 30-40 минут.

+0

Спасибо за ответ. Я попытался установить sess_expiration на значение, отличное от 0, оно удаляет столбец userdata (но не всю строку). Но основная проблема по-прежнему существует, т. Е. Не делает этого, когда пользователь закрывает свой браузер. – a7omiton

+0

Я собираюсь попробовать этот пользовательский класс сеанса: https://github.com/EllisLab/CodeIgniter/wiki/PK-Session и посмотрите, как это происходит. Похоже, что у других была такая же проблема. Gotta love open source :) – a7omiton

+0

Я думаю, что вся строка не удаляется из таблицы сеанса, хотя мы уничтожаем сеанс. Новый идентификатор сеанса (строка) создается каждый раз при входе в систему, но он не удаляется из таблицы. Проверяет ли каждый идентификатор каждый раз, чтобы создать новый идентификатор. – Dipen

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