PHP:会话的默认生命周期是多少

时间:2008-10-01 08:34:13

标签: php session

如果我点击了一个调用session_start()的页面。我需要等多久,所以如果我要刷新页面,我会收到一个新的会话ID?

6 个答案:

答案 0 :(得分:50)

查看php.ini为session.gc_maxlifetime设置的值是以秒为单位的ID生存期。

我相信默认值是1440秒(24分钟)

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

编辑:正如一些评论指出的那样,上述内容并不完全准确。这里有一个关于为什么以及如何实现会话生存期的精彩解释:

How do I expire a PHP session after 30 minutes?

答案 1 :(得分:22)

session.gc_maxlifetime指令的php.ini中的默认值(“gc”用于垃圾收集)是1440秒或24分钟。请参阅手册中的Session Runtime Configuation页面:

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

如果您有权访问这些常量,可以在php.ini或.httpd.conf文件中更改此常量,或者在您网站上的本地.htaccess文件中更改此常量。要使用.htaccess方法将超时设置为一小时,请将此行添加到站点根目录中的.htaccess文件中:

php_value session.gc_maxlifetime "3600"

如果您在共享主机上,或者您托管了多个未更改默认值的站点,请务必小心。默认会话位置是/ tmp目录,垃圾收集例程将每24分钟为这些其他站点运行(并在此过程中清除您的会话,无论保留多长时间) 。有关更好的说明,请参阅手册页上的notethis site

答案是使用session.save_path将会话移动到另一个目录。这也有助于防止坏人从默认的/ tmp目录中劫持访问者的会话。

答案 2 :(得分:3)

根据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”。

答案 3 :(得分:2)

这取决于你的php设置...
使用phpinfo()并查看会话章节。有session.gc_maxlifetimesession.cache_expire以及session.cookie_lifetime等值会影响会话生存期

编辑: 就像马丁写的那样

答案 4 :(得分:1)

但请注意,在大多数xampp / ampp /...-设置和一些Linux发行版中它都是0,这意味着在脚本中执行此操作之前永远不会删除该文件(或者通过shell进行修改)

PHP.INI:

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0

答案 5 :(得分:0)

您也可以使用类似Switch的东西。