我试图了解PHP会话何时会超时并迫使用户再次登录。
当用户第一次成功登录网站时,我正在设置一个全局会话,如下所示:
$_SESSION['AcmeAuthenticated'] = TRUE;
每隔一页,我都会在页面顶部查看以下内容:
if (!isset($_SESSION['AcmeAuthenticated']) and $_SESSION['AcmeAuthenticated'] !== TRUE) {
header('Location: index.php');
die;
}
我在开发过程中注意到,我可以让浏览器全天打开,它不会要求我再次登录。如果我退出浏览器,它会提示我再次登录。我检查了PHP信息和会话。gc_maxlifetime设置为900——我认为这意味着PHP会话将在15分钟内结束?
我是PHP的新手,所以我仍在努力学习会话是如何工作的,以及超时何时生效。
当您退出浏览器时,它将清除所有SESSIONS。这就是为什么每次退出浏览器时都必须重新登录的原因。但是,是的,您可以设置希望SESSION持续的时间。它向您展示了如何在这里:如何在30分钟后使PHP会话过期?
if
语句应为:
if(!isset($_SESSION['AcmeAuthenticated']) && $_SESSION['AcmeAuthenticated'] !== true)
{
header('Location: index.php');
die;
}
您应该使用&&
而不是and
。可以随意使用session_set_cookie_params()
来操作会话cookie参数,但听起来你的cookie是一个"会话"cookie;这就是它在浏览器关闭后消失的原因。
PHP会话在浏览器窗口关闭时结束[1]。
是的,session.gc_maxlifetime是以秒为单位设置的,所以900是15分钟。你可能想把它提高到大约30000(大约8小时)。