PHP会话超时/注销

时间:2015-11-17 00:53:03

标签: php session

我正在尝试了解PHP会话何时超时并​​强制用户重新登录。

当用户首次成功登录网站时,我正在设置一个全局会话:

$_SESSION['AcmeAuthenticated'] = TRUE;

在其他每一页上,我都会在页面顶部查看:

if (!isset($_SESSION['AcmeAuthenticated']) and $_SESSION['AcmeAuthenticated'] !== TRUE) {
 header('Location: index.php');
 die;
}

我在开发过程中注意到我可以整天打开浏览器,它不会要求我再次登录。如果我退出浏览器,它会提示我再次登录。我检查了PHP信息,session.gc_maxlifetime设置为900 - 我认为这意味着PHP会话将在15分钟内结束?

我是PHP的新手,所以仍然试图了解会话的工作方式以及超时何时生效。

3 个答案:

答案 0 :(得分:0)

if声明应为:

if(!isset($_SESSION['AcmeAuthenticated']) && $_SESSION['AcmeAuthenticated'] !== true)
{
    header('Location: index.php');
    die;
}

您应该使用&&代替and。您可以随意使用session_set_cookie_params()来操纵会话Cookie参数,但听起来您的Cookie是一个'会话'曲奇饼;这就是它在浏览器关闭后消失的原因。

答案 1 :(得分:0)

当您退出浏览器时,它将清除所有SESSIONS。这就是为什么每次退出浏览器时都必须重新登录的原因。但是,是的,您可以设置希望SESSION持续多长时间。它告诉你如何在这里: How do I expire a PHP session after 30 minutes?

答案 2 :(得分:0)

当浏览器窗口关闭[1]时,PHP会话结束。

是的,session.gc_maxlifetime以秒为单位设置,因此900为15分钟。你可能希望将其提高到大约30,000(约8小时)。