我无法为不同的用户角色启动会话并限制注销用户的文件夹

我正在使用登录脚本,并且正在尝试了解会话,但运气不佳。


当用户登录时,我希望他们重定向到相关文件夹,这是我的登录脚本


  if (isset($_POST['btnLogOn'])) {  

        $email     = !empty($_POST['email']) ? trim($_POST['email']) : null;

        $password = !empty($_POST['password']) ? $_POST['password'] : null;   

        $db=DB();

        $sql = "SELECT  * FROM users WHERE  email = ? LIMIT 1";

        $stat = $db->prepare($sql);

        $stat->bindParam(1, $email, PDO::PARAM_STR);

        $stat->execute();

        $row = $stat->fetch();

        if ($row && password_verify($password, $row['password'])) { 

            if (isset($_POST['remember'])) {

                setcookie('email', $email, time() + 60 * 60 * 7);

                setcookie('password', $password, time() + 60 * 60 * 7);

            }

            {

          $_SESSION['user_session'] = $row['user_id'];

          $_SESSION['user_role'] = $row['role'];

          switch($_SESSION['user_role']){

             case 'Admin':

                 $_SESSION['user_role'];

                 header( 'Location: admin');

                 break;

             case 'Advisor':

                 $_SESSION['user_role'] ;

                 header( 'Location: advisor');

                 break;

              case 'Tech':

                 $_SESSION['user_role'] ;

                 header( 'Location: tech');

                 break; 

                case 'User':

                 $_SESSION['user_role'];

                  // redirect to admin

                 header( 'Location: dashboard');

                 break; 

                }

我不确定上面的代码是否正确,并且我真的很难在每个“命名”文件夹的标题中编写什么代码。


我在单独的标头中尝试了很多乱七八糟的代码,但它要么不断刷新到 ../index.php,要么让我打开文件夹,无论我是否登录


            session_start();

         $_SESSION['user_session'] = $row['user_id'];

          $_SESSION['user_role'] = $row['role'];

            if(empty($_SESSION['user_role'])){

            header('Location: ../index.php');

            }

当用户登录角色时我想要发生的事情确定要打开哪个文件夹,如果没有人登录,他们将无法打开该文件夹


精慕HU
浏览 125回答 1
1回答

智慧大石

这完全取决于您想要实现的目标。如今,很容易使用一些框架或微框架来覆盖引擎盖下的一些基本内容,这使您不必再次重新创建自行车。这就是你获得优势的地方。在你的情况下,如果这是一个模板项目,我会这样做:项目根目录/index.php...    if (isset($_POST['btnLogOn'])) {             ...//get find user if exist           $domain = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]";       if ($row && password_verify($password, $row['password'])) {           if (isset($_POST['remember'])) {             setcookie('email', $email, time() + 60 * 60 * 7);             setcookie('password', $password, time() + 60 * 60 * 7);          }          $_SESSION['user_session'] = $row['user_id'];          $_SESSION['user_role'] = $row['role'];          switch($_SESSION['user_role']){             case 'Admin':                $dir = 'admin';                break;             case 'Advisor':                $dir = 'advisor';                break;             case 'Tech':                $dir = 'tech';                break;              case 'User':                $dir = 'dashboard';                break;             default:                $dir = 'index.php';           }           header( 'Location: ' . $domain . DIRECTORY_SEPARATOR . $dir);        }    }...和这里:根目录/admin/index.php$domain = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]";//check if user exist it is adminif(!isset($_SESSION['user_session']) || (isset($_SESSION['user_role']) && $_SESSION['user_role'] != 'admin')){    //it is not, redirect    header( 'Location: ' . $domain . DIRECTORY_SEPARATOR . 'index.php');}但它应该更加安全。因为现在这段代码对攻击者开放。
打开App,查看更多内容
随时随地看视频慕课网APP