无法将用户(管理员)正确分配给 visit/acces 和 adminpage.php

Can't correctly assign a user (Admin) to visit/acces an adminpage.php

当我使用 admin.php 中的代码时,它并没有给我预期的回显,而我的数据库中有正确的值

我已经尝试在 google / Whosebug 上搜索它,但找不到任何解决方案,只是连接不正确。试图把 ISSET 代码放在前面但也没有成功。

数据库:

用户名/密码/电子邮件/角色 admin/test123/@html.com/admin

登录后(会话)基本上什么也没有。

         <?php

  include_once 'includes/db_connect.php';
  include_once 'includes/functions.php';

  session_start();

  if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, role
  FROM members
                          WHERE username = ? LIMIT 1")) {
 $stmt->bind_param('s', $username);  // Bind "$email" to parameter.
 $stmt->execute();    // Execute the prepared query.
 $stmt->store_result();

// get variables from result.
 $stmt->bind_result($user_id, $username, $db_password, $salt, $role);
 $stmt->fetch();

            $role = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $role);

            $_SESSION['role'] = $role;
        }


     $role = "admin";

    if(isset($_SESSION['role'])) {
     if($_SESSION['role'] == $role) {
      echo "welcome adminisn";
         } else {
       echo ("Acces Denied");
      exit();
       }

             } else {
         echo "Session not set";
               }

它让我访问被拒绝 虽然我的角色列中有管理员

使用大写 _SESSION!?

if(isset($_session['role'])) {

这个分配是否正确? 什么是 $role? 如果 $role 设置为 "admin",则对所有人启用管理 mod。对于所有其他值,全部禁用。

$_SESSION['role'] = $role;

我假设它不起作用的原因是您没有在用户登录时为 $_SESSION['role'] 分配一个值,并且您没有语句来检查它是否未分配.

此代码将起作用的任何一种方式:

    <?php
session_start(); // If we remove this then we get error Session not set

$role = "admin"; // If we change the role to something else we get access not granted


if(isset($_SESSION['role'])) {

  if($_SESSION['role'] == $role) {
    echo "Welcome admin";
  } else {
    echo("Access not granted");
    exit();
  }
} else {
  echo "Session not set!";

}

我们需要先初始化session_start()。 我正在手动分配角色,但您应该从数据库查询中获取它以检查用户是否具有管理员权限。然后我们将检查会话是否已设置。如果不是,那么我们将显示消息会话未设置。

如果设置了会话,我们需要将角色与用户角色进行比较。如果匹配,我们会收到欢迎管理员的问候语,如果角色是其他角色,我们会收到未授予的消息访问权限。

我建议查看 php 手册以更多地了解会话。忘记一些东西真的很容易,然后整个事情就不起作用了。至少这是我以前的经验。