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

时间:2017-03-01 18:43:11

标签: php session

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

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

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

1 个答案:

答案 0 :(得分:1)

如果变量未设置,则检查变量是否为空字符串:!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密钥。