PHP Session没有超时

时间:2012-02-24 15:55:43

标签: php session

我似乎无法让我的会议超时。 看下面非常简单的代码。 开始按钮开始会话,下面打印id和time,直到超时。我将它设置为5秒,它会显示,但是如果你等待超过5秒并刷新它仍然显示id和5秒。 我在这里错过了什么吗?

<?php

echo <<<_END

<form method="post" action="">
<input type="hidden" name="start" value="yes"/>
<input type="submit" value="Start session"/>
</form>
_END;

if (isset($_POST['start']))
{
session_start();
ini_set('session.gc_maxlifetime', 5);
ini_set('gc_probability', 100);
ini_set('gc_divisor', 100);
}

echo session_id();
echo "<br>";
echo ini_get('session.gc_maxlifetime');

?>

3 个答案:

答案 0 :(得分:1)

来自the php documentation

To use cookie-based sessions, session_start() must be called before outputing anything to the browser.

答案 1 :(得分:0)

默认情况下在PHP会话数据存储在tmp目录中 可能是时间这么小,以便在逻辑上删除会话临时数据。 尝试增加会话maxlifetime。

(默认会话由cron删除。是否可以运行删除操作?)

答案 2 :(得分:0)

ini_set只是更改当前页面的设置。请尝试将以下代码放在页面顶部的if之外,并且每次处理会话时都需要调用session_start

<?php

ini_set('session.gc_maxlifetime', 5);
ini_set('gc_probability', 100);
ini_set('gc_divisor', 100);
session_start();

echo <<<_END
<form method="post" action="">
<input type="hidden" name="start" value="yes"/>
<input type="submit" value="Start session"/>
</form>
_END;

if (isset($_POST['start']))
{
    $_SESSION['test'] = 'I should disappear on next request after 5 seconds';
}

echo $_SESSION['test'];

?>