可以';我想不通!isset声明


Can't figure out !isset statement

我正在尝试使用会话变量来限制对页面的访问。我有三个访问级别:管理员,帮助和技术。在有帮助或技术访问的页面上,管理员也是允许的。我不知道如何写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,因此您的代码使每个人都成为管理员。