我正在尝试了解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的新手,所以仍然试图了解会话的工作方式以及超时何时生效。
答案 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小时)。