首页 > 解决方案 > 用户登录,角色在 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");
    }  


?>

我究竟做错了什么 ?

标签: phphtmlsessionsession-cookies

解决方案


您需要在此检查中使用 OR 而不是 AND

<?php
session_start();
if(!isset($_SESSION['loggedIn']) || 
    $_SESSION['loggedIn']!='true' ||
    $_SESSION['userType']!='User')
{
    header("Location: ../login.php");
    exit;
} 

推荐阅读