PHP: каково время жизни сессии по умолчанию - PullRequest
53 голосов
/ 01 октября 2008

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

Ответы [ 6 ]

50 голосов
/ 01 октября 2008

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

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

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

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

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

22 голосов
/ 01 октября 2008

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

3 голосов
/ 30 апреля 2012

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

2 голосов
/ 01 октября 2008

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

EDIT: это как Мартин пишет раньше

1 голос
/ 06 апреля 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
0 голосов
/ 06 августа 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...