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

StackOverflow https://stackoverflow.com/questions/156712

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

<?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».

это зависит от настроек PHP...
использовать phpinfo() и взгляните на главу сеанса.Есть такие ценности, как session.gc_maxlifetime и session.cache_expire и session.cookie_lifetime что влияет на время жизни сессий

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top