无法弄清楚!isset声明

时间:2011-10-29 03:43:06

标签: php

我正在尝试使用会话变量来限制对页面的访问。我有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();
    }
?>

当我拥有它时,它显示在此处,它允许所有级别访问应限制为“帮助”(也包括“管理员”)的页面。 有人能指出我的方式错误吗?任何帮助非常感谢。我很陌生,显然不完全理解它。

干杯

4 个答案:

答案 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,因此您的代码使每个人都成为管理员。