Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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_Sql_Session_Authentication - Fatal编程技术网

Php 检查多个变量以验证对页面的会话访问

Php 检查多个变量以验证对页面的会话访问,php,sql,session,authentication,Php,Sql,Session,Authentication,对于我的大多数站点,我可以很高兴地验证用户id是否存在,以便向注册用户显示受限内容。但是我想开发一个管理界面,以便于管理,并且只允许在满足两个(或更多)条件的情况下访问特定的页面集 我考虑的两个条件是用户ID(每个注册用户都有一个),但是我想验证该用户的角色,并可以选择从表的User_role列中提取一个值。目前有三种可能性,;管理员,编辑和读者 我不太明白如何让查询触发检查,我现有的会话代码是 // Here we check to see whether the user is logged

对于我的大多数站点,我可以很高兴地验证用户id是否存在,以便向注册用户显示受限内容。但是我想开发一个管理界面,以便于管理,并且只允许在满足两个(或更多)条件的情况下访问特定的页面集

我考虑的两个条件是用户ID(每个注册用户都有一个),但是我想验证该用户的角色,并可以选择从表的User_role列中提取一个值。目前有三种可能性,;管理员,编辑和读者

我不太明白如何让查询触发检查,我现有的会话代码是

// Here we check to see whether the user is logged in or not 
    if(empty($_SESSION['user'])) 
    { 
        // If they are not, redirect them to the login page. 
        header("Location: login.php"); 
        die("Redirecting to login.php"); 
    } 

如何添加一个额外的
$\u会话
变量来检查用户的角色?

可以尝试类似的方法(假设在登录和注册时设置了一个包含用户id或其他标识符的$\u会话变量):


我建议的方法还将考虑到此类特权用户的实际数量。如果您有很多这样的用户,请考虑在服务器上为每个用户在每个页面加载中检查数据库添加额外的负载,在这种情况下,我会使用一个会话存储变量来授予对某些页面和功能的访问权。会话实际上存储在服务器上,因此用户不能像编辑cookie一样编辑它,因此这应该提供足够的安全性

这个解决方案也应该考虑你希望它的可伸缩性和灵活性。如果您只找到一些受限权限,您可以很好地启用或禁用整数中的位,并将其存储在会话变量中。然后只需使用简单的掩码检查权限。另一方面,如果您找到的不仅仅是一些权限,那么您可以使用一系列用户权限。例如:“ab”应授予用户添加新帖子(a)和编辑其他用户帖子(b)的权限。这种方法应该提供更多的可伸缩性。我在一个实际的php实现中使用了这种方法,用于类似的后端管理


如果您希望在即时效果方面更具响应性,而不需要用户再次登录,我会选择更接近MQTT的产品,因为这是非常可扩展且易于管理的。为此,您可以使用开源Paho客户端并实例化每个登录,以便可以在它们之间异步发送数据。这个功能也可以使用一些JavaScript库来实现,但我在那里有点过时,因为几年前我就没有看过这些库。

我真的不理解你的问题。当您将某人登录到您的管理界面时,您可以在会话中添加用户角色。或者只需将用户id放入会话并查询数据库以检查用户角色。这是您的问题吗?是-当具有管理员角色的用户登录domain.com/admin/时,该表将被选中,并且他们已登录。如果他们有像编辑器或阅读器这样的角色,他们将被重定向到domain.com/login/,因为他们没有管理权限。请尝试以下操作:
If(empty($\u SESSION['user']){//如果他们没有,将他们重定向到登录页面。header(“Location:login.php”);die(“重定向到login.php”);}else{/*查询以检查用户角色*/}
@RaphaëlGonçalves这是我最难处理的查询。我熟悉if语句。您需要共享您的表结构库,但它似乎不起作用-我认为我的db连接文件(common.php)有问题可能有冲突-pastebin:创建一个新的数据库连接文件并使用此功能:谢谢-仍然无法让它登录并重定向正确编辑的代码
if(empty($_SESSION['user'])) 
    { 
        // If they are not, redirect them to the login page. 
        header("Location: login.php"); 
        die("Redirecting to login.php"); 
} else 
    {
        include_once("databaseConnection.php");
        $checkAdmin = "SELECT user_role FROM users WHERE id = '".$_SESSION['user_id']."';";
        $result = mysqli_query($conn, $checkAdmin);
        $user_role = mysqli_fetch_assoc($result);
        if ($user_role == "reader") 
            {
                // User is only a reader, redirecting them to the home page
                header("Location: /");  
                die("You're only a reader and you're not allowed here, redirecting you to the home page!");
        } elseif ($user_role == "editor")
            {
                // User is only an editor, redirecting them to the home page
                header("Location: /");
                die("You're only an editor and you're not allowed here, redirecting you to the home page!");        
        } elseif ($user_role == "editor")
            {
                // User is an admin, allowing them through
        } else
            {
            //Error identifying user's role
            header("Location: /");
            die("Some kind of error occured, show this to the site owner: (User role identification error)");
        }
    }