我在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"。我尝试做的是两者都可以访问,但一旦他们被记录,取决于其类别(他们是否管理或不管理),他们将能够做某些事情。
答案 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();
。我认为这是因为您多次使用标题功能。