使用会话存储cookie并检查登录

时间:2016-04-08 13:12:32

标签: php

我正在使用$_SESSION来存储Cookie,因为我需要在login.php上设置某些变量才能在其他地方使用。

登录我的login.php

if(!isset($_SESSION)) { 
session_start(); 
} 
$_SESSION['isLoggedIn'] = 1;
$_SESSION['loggedInID'] = $id;
$_SESSION['isAdmin'] = $isAdmin; // 1 for admin, else 0

在我的admin.html页面上调用admin.js,该页面会在加载时对admin.php进行ajax调用。我需要检查登录的用户是否是管理员。

我在admin.php上做了这个。

session_start();
if (!(isset($_SESSION['isAdmin']) && $_SESSION['isAdmin'] != 1)) {
    echo 'Not logged in as admin';
}

但现在在我的管理页面上,admin.php保持echo“未以管理员身份登录”;

为什么会这样?

4 个答案:

答案 0 :(得分:1)

你需要OR而不是AND:

if (!isset($_SESSION['isAdmin']) || $_SESSION['isAdmin'] != 1) {

现在,如果设置了变量,则第一个条件为false,因此将检查第二个条件。只有满足第二个条件(未以管理员身份登录),您才会看到警告。

答案 1 :(得分:0)

好吧,让我们说isset($_SESSION['isAdmin'] == true,然后说$_SESSION['isAdmin'] == 1。所以目前你的if看起来像这样:

if(!(true && 1!=1)) {
 ...
}

所以你得到

if(!(true && false)) {
     ...
    }

此外,你得到了

if(!(false)) {
     ...
    }

这真的是真的。尝试这样的事情:

session_start();
if (!isset($_SESSION['isAdmin']) || $_SESSION['isAdmin'] != 1) {
    echo 'Not logged in as admin';
}

答案 2 :(得分:0)

在您提供渲染的示例中

$ isAdmin = 1

if (!(true && false)) {
    echo 'Not logged in as admin';
}

这就是为什么你会得到回声结果未以管理员身份登录

答案 3 :(得分:-1)

在查看变量之前检查变量是否已定义

 session_start();
    if (isset($_SESSION['isAdmin']) {
        if($_SESSION['isAdmin'] != 1) {
            echo 'Not logged in as admin';
         }
    }