0

我想验证用户是否已登录以及用户是否有权使用 php 查看内容。

if($_SESSION['log'] != "1"){
if($_SESSION['type'] != "1" || $_SESSION['type'] != "2" || $_SESSION['type'] != "3"){
    header("Location: redirect.php");
}}

这完美地工作。

但我想在下面的同一条语句中检查所有内容。但即使是正确的登录,它也不起作用。

if($_SESSION['log'] != "1" || $_SESSION['type'] != "1" || $_SESSION['type'] != "2" || $_SESSION['type'] != "3"){
    header("Location: redirect.php");
}
4

4 回答 4

0

您的第一组代码中的逻辑将表明 if 语句略有不同:

if($_SESSION['log'] != "1" && ($_SESSION['type'] != "1" || $_SESSION['type'] != "2" || $_SESSION['type'] != "3")){
    header("Location: redirect.php");
}

在您的原始工作代码中,您只测试type会话信息,如果log != 1这意味着您的第二个代码很可能在原始中根本不会检查的任何其他子句上执行。

编辑您的原始代码:

if($_SESSION['log'] != "1")
{
// This condition is ALWAYS checked.
    if($_SESSION['type'] != "1" || $_SESSION['type'] != "2" || $_SESSION['type'] != "3")
    {
    // These conditions are ONLY checked if the first check passes.
        header("Location: redirect.php");
    }
}

在您的第二个示例中,同时检查所有条件,并且当您使用OR运算符时,如果其中任何一个通过,ir 将评估为真。

于 2012-08-27T08:00:14.357 回答
0

应该&&不是||

if($_SESSION['log'] != "1" && ($_SESSION['type'] != "1" || $_SESSION['type'] != "2" || $_SESSION['type'] != "3")){
    header("Location: redirect.php");
}

或者你可以使用in_array.

if ($_SESSION['log'] != "1" && !in_array($_SESSION['type'], array('1','2','3'))) {
  header("Location: redirect.php");
}
于 2012-08-27T08:01:17.533 回答
0

是否存在任何非零值$_SESSION['type']表示有效会话?如果是这样,你可以这样做:

if (empty($_SESSION['type'])) {
    header("Location: redirect.php");
}
于 2012-08-27T08:02:33.553 回答
0

..或in_array用于提高可读性

if ($_SESSION['log'] != "1" && !in_array($_SESSION['type'], array("1","2","3"))
于 2012-08-27T08:03:57.377 回答