PHP会话未超时

PHP会话未超时,php,session,Php,Session,我似乎无法让我的课程暂停。 请参阅下面非常简单的代码。 “开始”按钮启动会话,并在下面打印id和超时时间。我已将其设置为5秒,但如果等待5秒以上并刷新,它仍会显示id和5秒。 我是不是遗漏了什么 <?php echo <<<_END <form method="post" action=""> <input type="hidden" name="start" value="yes"/> <input type="submit" valu

我似乎无法让我的课程暂停。 请参阅下面非常简单的代码。 “开始”按钮启动会话,并在下面打印id和超时时间。我已将其设置为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');

?>

来自:


要使用基于cookie的会话,必须先调用session_start(),然后才能将任何内容输出到浏览器。

默认情况下,在tmp目录的PHP会话数据存储中 物理删除会话临时数据的时间可能很短。 尝试增加会话maxlifetime


(默认情况下,会话由cron删除。是否可以运行删除操作?

ini\u set
只是更改当前页面的设置。尝试将下面的代码放在页面顶部的
if
之外,每次处理会话时都需要调用
session\u 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'];

?>


是的。也必须在要使用会话变量的每个页面上调用,因此如果在此处无法使用,则将其放入
语句中。会话id是设置的cookie,如果浏览器仍发送cookie,则丢弃的会话将使用相同id重新启动。尝试在
$\u会话中存储某些内容,并查看它是否仍然存在。另外,在
会话开始之前执行
ini\u set
。据我所知,旧会话文件不是由cron删除的,而是由
会话开始()删除的。在每个
session\u start()
上,调用会话垃圾收集器并删除旧会话文件的可能性很低。OP甚至用
ini\u集(“GC\u概率”,100)配置了GC的行为;ini_集('gc_除数',100)
。我也找不到任何来源来支持您的说法,即时间太短的
会话\u maxlifetime
可能会导致问题。你能为我们提供一个来源吗?