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


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

6   51  

6 ответов:

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

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

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

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

как истечь срок действия 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 минуты для этих других сайтов (и уничтожать ваши сеансы в процессе, независимо от того, как долго они должны быть). Смотрите Примечание на руководство страница или этот сайт для лучшего объяснения.

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

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

это зависит от ваших настроек 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 тоже.