Php 使用时未定义索引!设置为检查登录凭据

Php 使用时未定义索引!设置为检查登录凭据,php,session,Php,Session,当用户首次登录时,我添加一个$\u会话['login']=true。 在另一个函数中,我检查login session变量,以确保用户已登录,而不仅仅是导航到该页面。像这样 if ((!isset($_SESSION['login']) && $_SESSION['login'] != '') || (empty($_SESSION))) { session_register_shutdown(); header("Location: login.php");

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

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

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

您正在检查变量是否不是空字符串,只有在未设置此变量的情况下:
!isset($\u会话['login'])和&$\u会话['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
键是否存在。

如果(!isset($\u SESSION['login'])出现语法错误
if(!isset($\u SESSION['login'])
您是否有
SESSION_start();
某处?还有
if(empty($\u SESSION['login']))| |$_SESSION['login']==false){SESSION_register_shutdown();header(“Location:login.php”);exit;//停止进一步执行,非常重要}
如果(SESSION_status()==php_SESSION_NONE){SESSION start()}
Aniket,我只检查是否设置了登录?我不需要检查它是否设置为“true”?@AniketSingh语法错误在哪里?如果有语法错误,他就不会出现未定义的索引错误。如果设置了会话,我不想重定向。如果设置了会话,那么他们就正确登录了。因此,如果我这样做,
if((空($\u会话))| |(isset($_SESSION['login'])&&&$_SESSION['login']=''){SESSION_register_shutdown();header(“Location:login.php”);exit;//停止进一步执行,非常重要}
我将陷入重定向循环。是的,这就是我的代码的原因。
empty()
对于布尔值false也会返回true。哦,对了。我很抱歉。您没有检查isset。是的,这应该可以。谢谢。