我正在尝试创建一个登录系统,该系统检查用户角色并重定向到相应的仪表板,同时还禁止用户手动输入他人的仪表板URL。
登录运行得很好,但是用户角色的检查就不是那么好了。
该站点的每个角色都有一个仪表板,每个仪表板的顶部是:
session_start();
if(!$_SESSION['sess_role'] == 'role1') {
header('location:../../index.php');
}
当您还没有登录时,它似乎可以工作,因为'sess_role‘属性不匹配,所以它会正确地返回到索引页面,但是一旦我以任何用户登录,我就能够通过手动输入URL进入每个仪表板,尽管没有正确的“角色”。
以下是登录码:
$msg = "";
if(isset($_POST['submitBtnLogin'])) {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if($username != "" && $password != "") {
try {
$query = "select * from `users` where `username`=:username and `password`=:password";
$stmt = $db->prepare($query);
$stmt->bindParam('username', $username, PDO::PARAM_STR);
$stmt->bindValue('password', $password, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($count == 1 && !empty($row)) {
$_SESSION['sess_user_id'] = $row['id'];
$_SESSION['sess_username'] = $row['username'];
$_SESSION['sess_role'] = $row['role'];
}
if($row['role'] == "role1") {
header('location:modules/role1/index.php');
} else if($row['role'] == "role2") {
header('location:modules/role2/index.php');
} else if($row['role'] == "role3") {
header('location:modules/role3/index.php');
} else if($row['role'] == "role4") {
header('location:modules/role4/index.php');
} else {
$msg = "Invalid login information.";
}
} catch (PDOException $e) {
echo "Error : ".$e->getMessage();
}
} else {
$msg = "Both fields are required.";
}
}
我试着这样做:
echo($_SESSION['sess_role']);
要查看输出是什么,它似乎可以正常工作,当我使用"role1“帐户时显示"role1”,其他角色也是如此。
例如,当访问"role2“仪表板时,输出仍然是"role1”,但我仍然能够输入。
我非常感谢在识别这个问题上的一些帮助。
发布于 2019-01-14 08:08:49
!
操作符绑定到$_SESSION['sess_role']
,而不是整个表达式。为了提高if($_SESSION['sess_role'] != 'role2') {
的可读性,您必须将表达式放在方括号中,或者最好使用not if(!($_SESSION['sess_role'] == 'role2'))
运算符
https://stackoverflow.com/questions/54174320
复制相似问题