Если я нажимаю страницу, которая вызывает session_start()
. Как долго мне придется ждать, так что, если я должен обновить страницу, мне был выпущен новый идентификатор сеанса?
PHP: какова продолжительность жизни сеанса по умолчанию
Ответ 1
Проверьте php.ini значение, установленное для session.gc_maxlifetime, является временем жизни идентификатора в секундах.
Я считаю, что по умолчанию 1440 секунд (24 минуты)
http://www.php.net/manual/en/session.configuration.php
Изменить: Как отмечают некоторые комментарии, вышеизложенное не совсем точно. Замечательное объяснение того, почему и как реализовать время сеанса, доступно здесь:
Ответ 2
Значение по умолчанию в 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 минуты для этих других сайтов (и уничтожить ваши сеансы в процессе, независимо от того, как долго они должны храниться). См. note на странице руководства или этот сайт для лучшее объяснение.
Ответ на этот вопрос - переместить сеансы в другой каталог, используя session.save_path. Это также помогает предотвратить попадание плохих парней из ваших учетных записей посетителей из каталога по умолчанию/tmp.
Ответ 3
это зависит от ваших настроек php...
используйте phpinfo()
и посмотрите главу сеанса. Существуют значения, такие как session.gc_maxlifetime
и session.cache_expire
и session.cookie_lifetime
, которые влияют на продолжительность сеанса
EDIT: это как Мартин писать до
Ответ 4
По словам пользователя на сайте 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".
Ответ 5
Но будьте осторожны, на большинстве настроек xampp/ampp/...- и некоторых linux destributions это 0, что означает, что файл никогда не будет удален, пока вы не сделаете это в своей script (или грязной через оболочку)
PHP.INI:
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0
Ответ 6
Вы можете использовать что-то вроде ini_set('session.gc_maxlifetime', 28800);//8 * 60 * 60
ini_set('session.gc_maxlifetime', 28800);//8 * 60 * 60
тоже.