如果我访问调用了session_start()
的页面,在刷新页面之前,我需要等多久才能获得一个新的会话ID?
请查看php.ini文件,其中session.gc_maxlifetime的值表示会话ID的生命周期,以秒为单位。
我相信默认值为1440秒(24分钟)。
http://www.php.net/manual/en/session.configuration.php
编辑:正如一些评论所指出的那样,上述内容并不完全准确。关于为什么以及如何实现会话生命周期的精彩解释可以在此处找到:
在php.ini中,“session.gc_maxlifetime”指令(“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 分钟运行一次(并清除您的会话,无论它们应该保留多长时间)。请参阅手册页面上有关 说明 或 此网站 获取更好的解释。
解决方法是将您的会话迁移到另一个目录,使用 session.save_path。这也有助于防止坏人从默认的 /tmp 目录中劫持访问者的会话。
这取决于您的php设置...
使用phpinfo()
并查看会话章节。有像session.gc_maxlifetime
和session.cache_expire
和session.cookie_lifetime
这样的值,它们会影响会话的生命周期。
编辑: 就像Martin之前写的那样
<?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();
?>
ini_set('session.gc_maxlifetime', 28800); // 8 * 60 * 60
的方法。但要注意,在大多数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