PHP会话超时/注销



我试图了解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小时)。

最新更新