Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请解释带有角色的PHP会话_Php_Mysql_Session_Login_Roles - Fatal编程技术网

请解释带有角色的PHP会话

请解释带有角色的PHP会话,php,mysql,session,login,roles,Php,Mysql,Session,Login,Roles,我有一个MySQL数据库。在那个数据库中,我有一个名为users的表。在用户中,我有用户名,密码,角色。如果角色是0,则它是一个用户。如果角色是1,则它是管理员 这就是当前会话的设置方式 if($count==1){ echo "true"; $_SESSION['username'] = $user; $_SESSION['password'] = $pass; } else { echo "Wrong";

我有一个MySQL数据库。在那个数据库中,我有一个名为
users
的表。在用户中,我有
用户名
密码
角色
。如果角色是
0
,则它是一个用户。如果角色是
1
,则它是管理员

这就是当前会话的设置方式

if($count==1){
        echo "true";
        $_SESSION['username'] = $user;
        $_SESSION['password'] = $pass;  
    }
    else {
        echo "Wrong";
    }
这是我在页面顶部的内容:

 session_start();

  if(!isset($_SESSION['username'])){
    header("location:login.php");
  }
但我对如何再次检查角色感到困惑。例如,如果是角色1=如果是角色0-用户,则会获得管理员页面

目前,我只有一个管理员,这就是我如何得到他们的授权

但我不确定这是否正确。我需要解释一下

if ( 'admin' == $_SESSION['username'] ) {

    include('admin.php');
}
else {
    include('user.php');
}

您应该在会话中设置角色,并检查其角色,而不是用户名:

...
echo "true";
$_SESSION['username'] = $user;
$_SESSION['password'] = $pass; 
$_SESSION['role'] = $role; 
...

if ($_SESSION['role'] == 1) {    
    include('admin.php');
} else {
    include('user.php');
}
或者设置一个管理变量,并在用户登录时始终检查该变量是否存在:

...
echo "true";
$_SESSION['username'] = $user;
$_SESSION['password'] = $pass; 
if($role == 1) {
   $_SESSION['admin'] = true; 
}
...

if (isset($_SESSION['admin'])) {    
    include('admin.php');
} else {
    include('user.php');
}

您在login.php中有数据库连接,对吗?为什么不使用连接并获取用户的角色信息?当然,如果数据库中存在用户名和密码,则根据该角色值重定向用户,如(我与一个过程建立连接并调用该过程并加载信息)如果必须控制用户是否存在,则在;行计数>1,例如:

$role = "";
$username = "";
$password = "";
$conn = oci_connect(---);
$stid = oci_parse($conn, "begin packageX.login(:username,:password,:role); end;");

oci_bind_by_name($stid, ":username", $username);
oci_bind_by_name($stid, ":password", $password);
oci_bind_by_name($stid, ":role", $role);
if ( $role == 1 and $username!="" and $password!="") {

    header( "Location: admin.php" );
}
else if($role == 0 and $username!="" and $password!=""){ 
    header( "Location: user.php" );
}

这两个函数将检查会话是否存在,并检查用户权限

function confirmed_login(){

    if(!isset($_SESSION['permission'])){    
        header('Location: login_redirect.php'); 
    }
}

function permission_admin($permission){

    if($permission != '1'){
        header('Location: login_redirect.php'); 
    }
}


function check_login($p) {

    permission_admin($p);
    confirmed_login();

}
只需在任何受限页面顶部调用此函数,如下所示:

check_login($SESSION['role']);

是的,我有数据库连接。我不知道该把什么放在哪里。我有三个页面,每个页面有两个额外的php页面(每个用户一个),所以如果是用户,它将包括这个页面,如果是管理员,它将包括这个页面……好的,通过连接将用户的用户名、密码和角色信息存储在变量中。然后,例如,如果用户存在于表中,然后查看他的角色号,如果该角色是一个,则可以使用标题(“Location:admin.php”);否则将重定向用户标题(“Location:user.php”);您只在login.php中(或在登录期间)设置了$_会话值,实际上根本不应该设置$_会话['password'],这是一个安全缺陷;在每个php文件的顶部(不管是否登录),您可以随时检查$\u会话['admin']是否已设置。