请解释带有角色的PHP会话
我有一个MySQL数据库。在那个数据库中,我有一个名为请解释带有角色的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";
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']是否已设置。