使用!ISSET检查登录凭据时未定义的索引



当用户首次在i添加 $_SESSION['login'] = true;中登录时。在另一个功能中,我正在检查登录会话变量,以确保用户已登录,而不仅仅是导航到该页面。这样。

if ((!isset($_SESSION['login']) && $_SESSION['login'] != '') || (empty($_SESSION))) {
    session_register_shutdown();
    header("Location: login.php");
    exit; // stop further executing, very important
}

因此,如果未设置"登录会话变量",则将重定向到登录页面。它有效,但我会收到一个未定义的索引:重定向时登录错误。有没有办法解决此问题?

您是否仅在未设置的情况下才会检查该变量是否不是空字符串:!isset($_SESSION['login']) && $_SESSION['login'] != ''。这些情况是相互排斥的。您可能是要这样做的?

if ((empty($_SESSION)) || (isset($_SESSION['login']) && $_SESSION['login'] == '')) {
    session_register_shutdown();
    header("Location: login.php");
    exit; // stop further executing, very important
}

尽管empty()检查索引是未设置还是空字符串,因此您可以这样做:

if (empty($_SESSION) || empty($_SESSION['login'])) {
    session_register_shutdown();
    header("Location: login.php");
    exit; // stop further executing, very important
}

注意操作顺序也很重要。检查数组是否为空,检查是否存在login密钥。

最新更新