Каково время жизни сеанса по умолчанию?

Если я попаду на страницу, которая вызывает session_start(), как долго мне придется ждать, прежде чем я получу новый идентификатор сеанса при обновлении страницы?


person Greg B    schedule 01.10.2008    source источник
comment
также см. более подробный ответ: stackoverflow.com/questions/520237/   -  person kontur    schedule 14.08.2012


Ответы (6)


arrow_upward
58
arrow_downward

Проверьте php.ini, значение, установленное для session.gc_maxlifetime, — это время жизни идентификатора в секундах.

Я считаю, что по умолчанию 1440 секунд (24 минуты)

http://www.php.net/manual/en/session.configuration.php

Редактировать. Как отмечают некоторые комментарии, приведенное выше не совсем точно. Прекрасное объяснение того, почему и как реализовать время жизни сеанса, доступно здесь:

Как завершить сеанс PHP через 30 минут?< /а>

person Martin    schedule 01.10.2008
comment
-1, не правильный ответ на вопрос. распространенное заблуждение. - person goat; 30.04.2012
comment
@chris, почему бы тебе не предложить альтернативный ответ? - person Brannon; 27.06.2013
comment
Как пишет Брэннон, это совершенно неправильно и не должно быть выбранным ответом. Это значение сообщает сборщику мусора, как себя вести, а не о том, как долго живет ваша сессия. Сессия могла бы жить вечно, если бы вы не добавили какой-то механизм. Ключевым моментом является самостоятельное управление временем жизни сеанса (т. е. удаление данных сеанса после периода бездействия) и установка для session.gc_maxlifetime большего или равного значения. kontur предложил лучший ответ на этот вопрос, но, пожалуйста, отмените этот ответ, это даже приводит к проблемам с безопасностью. - person Ninj; 19.09.2013
comment
Неправильный ответ, это только устанавливает время, когда недействительные файлы сеанса удаляются/собираются мусором. Установка этого значения выше НЕ будет продлевать пользовательские сеансы. - person Manuel Arwed Schmidt; 15.06.2014

arrow_upward
25
arrow_downward

Значение по умолчанию в php.ini для директивы session.gc_maxlifetime (gc для сборки мусора) составляет 1440 секунд или 24 минуты. См. страницу конфигурации среды выполнения сеанса в руководстве:

http://www.php.net/manual/en/session.configuration.php

Вы можете изменить эту константу в файлах php.ini или .httpd.conf, если у вас есть к ним доступ, или в локальном файле .htaccess на вашем веб-сайте. Чтобы установить время ожидания в один час с помощью метода .htaccess, добавьте эту строку в файл .htaccess в корневом каталоге сайта:

php_value session.gc_maxlifetime "3600"

Будьте осторожны, если вы находитесь на общем хосте или если вы размещаете более одного сайта, где вы не изменили настройки по умолчанию. Расположением сеанса по умолчанию является каталог /tmp, и процедура сборки мусора будет запускаться каждые 24 минуты для этих других сайтов (и стирать ваши сеансы в процессе, независимо от того, как долго они должны храниться). . См. примечание в руководстве. страницу или этот сайт для лучшего объяснения.

Ответом на это является перемещение сеансов в другой каталог с помощью session.save_path. Это также помогает предотвратить перехват сеансов ваших посетителей из каталога /tmp по умолчанию.

person flamingLogos    schedule 01.10.2008
comment
-1, не правильный ответ на вопрос. распространенное заблуждение. собранный файл сеанса gc не заставит php генерировать новый идентификатор сеанса, а ограничение по времени не является надежным, даже если сеансы сохраняются в своем собственном каталоге. - person goat; 30.04.2012

arrow_upward
4
arrow_downward

это зависит от ваших настроек php...
используйте phpinfo() и взгляните на главу сеанса. Существуют такие значения, как session.gc_maxlifetime, session.cache_expire и session.cookie_lifetime, которые влияют на время жизни сеанса.

РЕДАКТИРОВАТЬ: это похоже на то, что Мартин писал раньше

person jochil    schedule 01.10.2008

arrow_upward
3
arrow_downward

По словам пользователя на сайте PHP.net, его попытки сохранить сеанс не увенчались успехом, поэтому ему пришлось искать обходной путь.

<?php

$Lifetime = 3600;
$separator = (strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN")) ? "\\" : "/";

$DirectoryPath = dirname(__FILE__) . "{$separator}SessionData";
//in Wamp for Windows the result for $DirectoryPath
//would be C:\wamp\www\your_site\SessionData

is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777);

if (ini_get("session.use_trans_sid") == true) {
    ini_set("url_rewriter.tags", "");
    ini_set("session.use_trans_sid", false);

}

ini_set("session.gc_maxlifetime", $Lifetime);
ini_set("session.gc_divisor", "1");
ini_set("session.gc_probability", "1");
ini_set("session.cookie_lifetime", "0");
ini_set("session.save_path", $DirectoryPath);
session_start();

?>

В папке SessionData будут храниться текстовые файлы для хранения информации о сеансе, каждый файл будет иметь имя, похожее на «sess_a_big_hash_here».

person Junior Mayhé    schedule 29.04.2012

arrow_upward
1
arrow_downward

Но будьте осторожны, в большинстве установок xampp/ampp/... и некоторых дистрибутивах Linux это 0, что означает, что файл никогда не будет удален, пока вы не сделаете это в своем скрипте (или не очистите его через оболочку)

PHP.INI:

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0
person Sliq    schedule 06.04.2012

arrow_upward
1
arrow_downward

Вы также можете использовать что-то вроде ini_set('session.gc_maxlifetime', 28800); // 8 * 60 * 60.

person Eduardo Cuomo    schedule 05.08.2018