我似乎无法让我的会议超时。 看下面非常简单的代码。 开始按钮开始会话,下面打印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');
?>
答案 0 :(得分:1)
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'];
?>