2015-08-03 2 views
0

Я установил session.gc_maxlifetime и session.cookie_lifetime. Как указано на сайте, это gc_maxlifetime должно установить максимальное время сеанса и установить cookie_lifetime на должен уничтожить сеанс. Но он работает не так, как ожидалось.Сессия в ini_set не работает как ожидалось

У меня следующий код в моем файле PHP:

ini_set('session.gc_maxlifetime', 3600); // For testing I keep it for 10 sec 
ini_set('session.cookie_lifetime', 0); 
session_start(); 
if ($_GET['set']) { 
    $_SESSION['test'] = 'test'; 
} 

if ($_GET['delete']) { 
    session_destroy(); 
} 
print_r($_SESSION); 
+1

какая именно проблема? –

+0

Не работает должным образом. Это не разрушает сеанс через час и при закрытии браузера. –

+0

http://php.net/manual/en/function.in-set.php 'Опция конфигурации сохранит это новое значение во время выполнения скрипта и будет восстановлена ​​по окончании скрипта.' –

ответ

0

Это лучше делать такого рода вещи глобально в php.ini, потому что все сценарии имеют возможность (на основе gc_probability/gc_divisor), чтобы вызвать сбор мусора и они сделают это на основе собственных текущих настроек.

Если это невозможно, обходным путем является установка пользовательского session_save_path в вашем скрипте.

0

Установка session.cookie_lifetime to 0 не уничтожает сеанс, он сообщает браузеру отказаться от файла cookie при закрытии.

session.gc_maxlifetime Настройка немного сложнее. Я действительно устанавливаю время после того, как сессия считается истекшей и поэтому удалена. Однако это происходит не сразу, а на самом деле, в зависимости от других настроек - это может не произойти вообще.
Что происходит, у вас также есть session.gc_probability и session.gc_divisor настройки, которые вместе образуют «шанс» для сборки мусора сеанса для запуска - это объясняется в PHP manual.
Только в том случае, когда GC работает, что session.gc_maxlifetime вступает в игру, а существующие временные метки сеанса сравниваются с ним.

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