68

如果我点击了一个调用 的页面,session_start()当我刷新页面时,我需要等待多长时间才能获得新的会话 ID?

4

6 回答 6

61

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

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

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

编辑:正如一些评论指出的那样,上述内容并不完全准确。此处提供了有关为什么以及如何实现会话生命周期的精彩解释:

如何在 30 分钟后使 PHP 会话过期?

于 2008-10-01T08:39:06.930 回答
27

session.gc_maxlifetime指令在 php.ini 中的默认值(“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 目录劫持访问者的会话。

于 2008-10-01T09:11:56.617 回答
5

这取决于您的 php 设置...
使用phpinfo()并查看会话章节。有一些值,比如session.gc_maxlifetimeand session.cache_expiresession.cookie_lifetime它们会影响会话的生命周期

编辑:就像马丁之前写的

于 2008-10-01T08:42:05.020 回答
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”。

于 2012-04-29T22:47:19.053 回答
2

你也可以使用类似的东西ini_set('session.gc_maxlifetime', 28800); // 8 * 60 * 60

于 2018-08-05T21:06:09.987 回答
1

但请注意,在大多数 xampp/ampp/...-setups 和一些 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
于 2012-04-06T12:50:55.193 回答