在PHP中管理两个不同的SESSION

时间:2017-06-20 16:19:31

标签: php redirect

我在MySQL数据库中有一个用户表,其中包含一个tinyint值(0或1),用于确定用户的类别。

所以,在我的login.php中,我得到了值(存储为' admin'):

if (password_verify($pwd, $row['password']) && $count==1){ if($isadmin==1) { $_SESSION['admin_session'] = $row['userid']; header("location: adminpanel.php"); } else { $_SESSION['user_session'] = $row['userid']; header("location: adminpanel.php"); } }

然后我分配会话:

if (isset($_SESSION['user_session'])){
    header("location: adminpanel.php");
    exit;
} else if(isset($_SESSION['admin_session'])){
    header("location: adminpanel.php");
    exit;
}

当谈到检查会话时,我这样做:

{{1}}

但是......它没有用。该页面没有加载,它显示一条浏览器错误消息,指出有太多的重定向。我怎么能这样做?

我知道这两个会议都指向同一个" adminpanel.php"。我尝试做的是两者都可以访问,但一旦他们被记录,取决于其类别(他们是否管理或不管理),他们将能够做某些事情。

2 个答案:

答案 0 :(得分:1)

我建议简化流程,只是让用户在会话中使用一个标志告诉你他们是不是管理员。

$query = $db->query("SELECT ..., admin FROM users WHERE email='$mail'");
$row = $query->fetch_array();

if (password_verify($pwd, $row['password'])){
    $_SESSION['user'] = $row['userid'];
    $_SESSION['isadmin'] = $row['admin'] == 1 ? true : false;

}

当谈到检查会话时,我这样做:

if (isset($_SESSION['isadmin']) && $_SESSION['isadmin']){
    header("location: adminpanel.php");
    exit;
} else 
    // NOTE you had this redirecting exactly as above to adminpanel
    header("location: userpanel.php");
    exit;
}

答案 1 :(得分:-1)

尝试在php脚本的顶部添加ob_start();。我认为这是因为您多次使用标题功能。