我正在尝试使用会话变量来限制对页面的访问。我有3个级别的访问权限:管理员,帮助和技术。在具有帮助或技术访问权限的页面上,也允许使用admin。我无法弄清楚如何编写if语句。 这是我的代码:
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("location: fail_access.php");
exit();
}
if ((!isset($_SESSION['SESS_ACCESSLVL']) == 'admin') || (!isset($_SESSION['SESS_ACCESSLVL']) == 'help')) {
header("location: fail_access.php");
exit();
}
?>
当我拥有它时,它显示在此处,它允许所有级别访问应限制为“帮助”(也包括“管理员”)的页面。 有人能指出我的方式错误吗?任何帮助非常感谢。我很陌生,显然不完全理解它。
干杯
答案 0 :(得分:2)
尝试:
if (
!isset($_SESSION['SESS_ACCESSLVL']) ||
!(($_SESSION['SESS_ACCESSLVL'] == 'admin') || ($_SESSION['SESS_ACCESSLVL'] == 'help'))
)
{
header("location: fail_access.php");
exit();
}
你也可以尝试http://php.net/manual/en/function.in-array.php
$allowedAccessLevels = array('admin', 'help');
if (
!isset($_SESSION['SESS_ACCESSLVL']) ||
!in_array($_SESSION['SESS_ACCESSLVL'], $allowedAccessLevels)
)
{
header("location: fail_access.php");
exit();
}
答案 1 :(得分:1)
isset
检查是否设置了变量或数组条目,并相应地返回一个布尔值。它不会以任何方式考虑或返回该值。
检查它是否已设置,如果是,请检查值。
if(isset($_SESSION['SESS_ACCESSLVL']))
{
$level = $_SESSION['SESS_ACCESSLVL'];
// Check $level
}
答案 2 :(得分:1)
!isset($_SESSION['SESS_ACCESSLVL']) == 'admin'
你想在这做什么? isset
返回一个布尔值。您将布尔值与字符串进行比较。想一想。
试试这个:
(isset($_SESSION['SESS_ACCESSLVL']) && $_SESSION['SESS_ACCESSLVL']==='admin')
isset
部分并不是严格需要的,因为后一种情况如果没有设置就会失败,但我认为它会抛出一个警告(除非你把它们关掉)。
答案 3 :(得分:0)
isset返回true或false。您正在将此true / false值与访问字符串进行比较。在PHP中,true == 'some string'
为TRUE,因此您的代码使每个人都成为管理员。