【问题标题】:How do I check for permissions in a session? [duplicate]如何检查会话中的权限? [复制]
【发布时间】:2026-01-09 10:45:01
【问题描述】:

我做了一个登录页面,效果很好。我系统上的每个帐户都有一个用户名、密码和权限。在登录屏幕上,您只需要填写您的用户名和密码,记录就会自动链接到会话,所以我确定会话在登录时知道它有什么权限。我想区分管理员和管理员用户帐号。管理员帐户应重定向到与用户不同的屏幕。这是我的代码:

if ($_SESSION['Permission'] = "admin") { 
    header("location:adminmenu.html");
} else {
    header("location:usermenu.html"); 
}

当我运行它时,它会自动将我带到管理菜单,即使语句不正确。我该如何解决这个问题?

这不一样,因为问题不在于解析错误。

【问题讨论】:

  • 您分配的是=,而不是比较,=====
  • 即使我改变了它,它仍然每次都会将我重定向到管理菜单。
  • 您已将权限分配给会话,因此您需要先销毁会话并确保在其他任何地方都不会发生这种情况。
  • 练习写if ('foo' == $var)而不是if ($var == 'foo')通常是个好主意,这样如果你错过了=就会抛出一个错误。
  • 我添加了一个 session_destroy();和一个 session_start();在语句前面,现在它只重定向到 usermenu.html。

标签: php html session if-statement


【解决方案1】:

检查以下内容:

1.) 使用比较而不是分配

if ($_SESSION['Permission'] === "admin") { 
header("location:adminmenu.html");
} else {
header("location:usermenu.html"); 
}

2.) 确保在每个请求上运行 session_start()

3.) 确保 $_SESSION['Permission'] 已设置,运行 var_dump($_SESSION);以确保值设置正确。

【讨论】:

    【解决方案2】:

    确保在比较值时您使用的是== 而不是=。还要看看页面顶部是否有session_start();

    session_start();
    if ($_SESSION['Permission'] == "admin") { 
    header("location:adminmenu.html");
    } else {
    header("location:usermenu.html"); 
    }
    

    【讨论】:

      【解决方案3】:

      这是因为不是比较您分配给 $_SESSSION['Permision'] 管理值,而是返回给 if 语句。然后在 if 语句中将检查 "admin" == true 在这种情况下是否为真。

      避免这种情况的最简单方法是将YODA Expressions 与三元运算符一起使用它可以简化代码

      session_start();
      header('Location: ' . isset($_SESSION['Permission'] && 'admin' === $_SESSION['Permission'] ? 'admin' : 'user' . 'menu.html');
      

      它和下面的代码一样(就结果而言)

      if (isset($_SESSION['Permission'] && "admin" === $_SESSION['Permission']) {
         header("Location: adminmenu.html");
      } else {
         header("Location: usermenu.html");
      }
      

      还要注意 isset() 函数的存在,它检查会话数组中是否存在权限,因为当你不检查它时,你会得到不存在索引的通知

      【讨论】:

        最近更新 更多