重定向 PHP 解析角色


redirecting PHP resolving the roles

美好的一天,我正在制作一个网站,我有一个问题。当我登录一个用户时,如果他是一个简单的用户或管理员,php代码会从数据库中获取信息。

    <?php 
require("session.php");
if(!empty($_POST)){
    $user='';
    $log_control=false;
    $q="SELECT id,username,email,salt,password FROM users WHERE username=:username LIMIT 1";
    $q_par=array(':username'=>$_POST['user']);
    try{
        $statment=$dbh->prepare($q);
        $res=$statment->execute($q_par);
    }catch(PDOException $e)
    {
    die("Can't execute query:" . $e->getMessage());
    }       
      $row=$statment->fetch();
      if($row) 
        { 
            $pswd_check=hash('sha256',
            $_POST['password'] . $row['salt']); 
            for($i=0;$i<65536;$i++) 
            {  $pswd_check=hash('sha256', $pswd_check . $row['salt']);  } 
            if($pswd_check===$row['password']) 
            {  $log_control=true; } 
            if($log_control) 
            {   
            $q="SELECT userrole FROM users WHERE username=:username LIMIT 1";
            $q_par=array(':username'=>$_POST['user']);
    try{
        $statment=$dbh->prepare($q);
        $res=$statment->execute($q_par);
    }catch(PDOException $e)
    {
    die("Can't execute query:" . $e->getMessage());
    }   
    $role = $statment->fetchColumn();

                if($role=='U'){
                unset($row['salt']); 
                unset($row['password']);  
                $_SESSION['user'] = $row; 
                header("Location: user.php"); 
                die("Redirecting to: user.php");
                }
                if($role=='S'){
                unset($row['salt']); 
                unset($row['password']);  
                $_SESSION['user'] = $row; 
                header("Location: admin.php"); 
                die("Redirecting to: admin.php");
                }
            }else 
            {  
            echo '<div class="alert">Password or username is wrong!</div>';
                $user=htmlentities($_POST['user'],
                ENT_QUOTES, 'UTF-8'); 
            } 
        }
        }  ?>

所以,这是我尝试登录用户的一部分。但是在同一页面代码的另一部分,我试图控制用户是否已登录。同时,我正在尝试获取他是用户还是管理员的信息。有了这个:

<?php
if(isset($_SESSION['user'])){ 
                if($_SESSION['userrole']=='U'){
                header("Location: user.php"); 
                }
                if($_SESSION['userrole']=='S'){         
        header("Location: admin.php"); 
        }}
?>

但是当我再次访问此页面(登录后)时,它不会重定向我,它说用户角色未定义,我必须再次登录。怎么了?

错误非常明显 未定义的变量

您没有在代码中定义此变量:

$_SESSION['userrole']

您的会话工作正常,您只需要在定义 $_SESSION['user'] 的位置定义角色。