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

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


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


Ответы (6)


Проверьте 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

Значение по умолчанию в 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

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

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

person jochil    schedule 01.10.2008

По словам пользователя на сайте 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

Но будьте осторожны, в большинстве установок 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

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

person Eduardo Cuomo    schedule 05.08.2018