我正在尝试使用会话变量来限制对页面的访问。我有三个访问级别:管理员,帮助和技术。在有帮助或技术访问的页面上,管理员也是允许的。我不知道如何写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();
}
?>
当我拥有它时,它允许所有级别访问应该限制为"帮助"(也包括"管理员"(的页面。有人能指出我的错误吗??非常感谢您的帮助。我对此很陌生,显然还不完全理解。
干杯
尝试:
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();
}
isset
检查是否设置了变量或数组项,并相应地返回布尔值。它不会以任何方式考虑或返回值。
只需检查它是否已设置,如果已设置,请检查值。
if(isset($_SESSION['SESS_ACCESSLVL']))
{
$level = $_SESSION['SESS_ACCESSLVL'];
// Check $level
}
!isset($_SESSION['SESS_ACCESSLVL']) == 'admin'
你在这里想干什么?isset
返回一个布尔值。您正在将布尔值与字符串进行比较。想想看。
试试这个:
(isset($_SESSION['SESS_ACCESSLVL']) && $_SESSION['SESS_ACCESSLVL']==='admin')
isset
部分不是严格需要的,因为如果不设置后一个条件,它将失败,但我认为它会发出警告(除非关闭它们(。
isset返回true或false。您正在将这个true/false值与您的访问字符串进行比较。在PHP中,true == 'some string'
是TRUE,因此您的代码使每个人都成为管理员。