PHP会话超时/注销

3

我正在尝试理解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还很陌生,仍在尝试学习会话如何工作以及何时会出现超时。


你应该使用适当的比较运算符——&&而不是and - Darren
3个回答

0

if语句应该是:

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

你应该使用&&而不是and。可以随意使用session_set_cookie_params()来操作会话cookie参数,但听起来你的cookie是一个“会话”cookie;这就是为什么它在关闭浏览器后消失的原因。

0

当您退出浏览器时,它将清除所有SESSIONS。这就是为什么每次退出浏览器后您都必须重新登录的原因。但是,是的,您可以设置SESSION的持续时间。在此处显示如何设置: 如何在30分钟后使PHP会话过期?


这是一个不一定正确的传说。它取决于会话是通过 cookie 还是查询字符串处理,取决于 cookie 的生命周期以及客户端在关闭时是否移除 cookie(这是客户端配置,超出您的控制范围)。一些网站通过 AJAX 经常更新,因此在每次刷新时会话超时时间会被重置,但该功能在浏览器窗口关闭后将不再存在,因此会话会在那时过期。 - syck
@syck 兄弟,你在浏览我的答案吗? - frosty
只有一个。当我看到你认为缩进会使脚本不易读时,我对你实际拥有多少编程经验感到很感兴趣。 - syck
@syck 兄弟,那只是个人喜好而已。你为什么要这么固执呢? - frosty

0

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

是的,session.gc_maxlifetime以秒为单位设置,因此900表示15分钟。您可能希望将其增加到约30,000(约8小时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接