通常,站点会为用户提供记住其登录信息的选项,因此它将在会话第一次开始时将 cookie 生命周期设置为零或 X。
为了记住这个选择,我将生命周期值放在 $_SESSION 变量中。但是当我想继续会话时,在会话开始之前我无法检索到这个值,如果我想调用 session_set_cookie_params() 我必须在之前这样做。
所以目前我在继续会话时不调用 session_set_cookie_params() 。相反,我存储会话开始时的当前时间,并在会话继续时检查它。这是代码(注意:这是一个简化版本,原始代码包含所有其他需要的东西,如 session_register_shutdown()):
// when I start the session
[...]
session_set_cookie_params($duration); // $duration was set before
session_start();
$_SESSION['starttime'] = time();
$_SESSION['duration'] = $duration;
//-----------------------------------
// when I continue the session
$ok = true;
session_start();
if (isset($_SESSION['starttime']))
{
$elapsed = $_SESSION['starttime']; - time();
$duration = $_SESSION['duration'];
if ($elapsed >= $duration and $duration !== 0)
{
$ok = false;
}
}
else
{
$ok = false;
}
if (! $ok)
{
// destroy the session
}
它是否正确?如果不是,为什么以及是否有更聪明的方法来处理会话持续时间?