php - 用户登录,角色在 PHP 中无法正常工作
问题描述
我以用户身份在我的数据库中创建了一个表,并且我已经分配了用户类型为 Admin、User、Vendor 的帐户。
我为每个角色创建了 3 个单独的仪表板。当我登录到系统时,重定向工作得很好。但是,当我插入另一种类型用户的仪表板的 url 时,页面加载时没有任何重定向。
当我以用户身份登录时,如果我在浏览器管理页面中插入以下网址,则为普通用户加载。
http://localhost:3002/Admin/dashboard.php
我无法弄清楚我的代码有什么问题。
这是我用于登录控制的 php 代码
<?php
session_start();
include('./validate.php');
require_once('../Includes/db/dbConnection.php');
$db = DBConnection::getInstance();
$connection = $db->getConnection();
if(isset($_POST['btnLogin'])){
$username=validate($_POST['uname']);
$pass=validate($_POST['psw']);
$sql="SELECT userId,userType FROM user WHERE username='$username' AND password='$pass'";
$res=mysqli_query($connection,$sql);
$count=mysqli_num_rows($res)>0;
if($count>0){
$row=$res->fetch_assoc();
$_SESSION['userId']=$row['userId'];
$_SESSION['username']=$username;
$_SESSION['userType']=$row['userType'];
$_SESSION['loggedIn']='true';
switch ($_SESSION['userType']){
case 'User':
header("location: ../User/dashboard.php");
break;
case 'Admin':
header("location: ../Admin/dashboard.php");
break;
case 'Vendor':
header("location: ../Vendor/dashboard.php");
break;
default:
break;
}
}else{
$_SESSION['status']='Wrong Username/Password';
header("Location: ../login.php");
}
}
?>
这是我在dashboard.php 文件中为每个用户使用的代码。
行政
<?php
session_start();
if(!isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']!='true' && $_SESSION['userType']!='Admin'){
header("Location: ../login.php");
}
?>
用户
<?php
session_start();
if(!isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']!='true' && $_SESSION['userType']!='User'){
header("Location: ../login.php");
}
?>
我究竟做错了什么 ?
解决方案
您需要在此检查中使用 OR 而不是 AND
<?php
session_start();
if(!isset($_SESSION['loggedIn']) ||
$_SESSION['loggedIn']!='true' ||
$_SESSION['userType']!='User')
{
header("Location: ../login.php");
exit;
}
推荐阅读
- django - 如何解决 Django 中的图像调整大小问题?
- angular - 角度不能用于相同标签的切换动作
- reactjs - 如何在新的获取请求中取消先前的获取请求?
- bash - 了解输出到标准输出和常规文件的区别
- c# - 如何通过组合来自两个集合的数据来创建一个集合?
- kubernetes - Kafka 无法连接到 EKS 上的 zookeeper 合奏
- python - 如何在一个字段中选择多个值?
- c++ - 复制构造函数、赋值运算符 C++
- javascript - 在有js代码输出的php代码中是必须的,例如通过alert变量
- android - 为什么要编写测试广告以及 google admob 需要多长时间才能显示在 android 应用程序上?