【发布时间】:2013-07-03 10:16:45
【问题描述】:
通常网站会为用户提供记住其登录信息的选项,因此它会在第一次会话开始时将 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
}
这是正确的吗?如果不是,为什么以及是否有更智能的方法来处理会话持续时间?
【问题讨论】: