将会话变量与获取变量 PHP 进行比较


Comparing session variable with get variable PHP

我正在尝试将$_SESSION变量与$_GET变量进行比较。

两者都是数字:

$_SESSION['auth'] === $_GET['user']

如果两个结果都等于 1,则继续。

由于某种原因,这无法正常工作。使用时:if $_SESSION['auth'] = 2, and $_GET['user'] = 1 ,它仍然继续。

编辑:

if(isset($_SESSION['auth'])===isset($_GET['user'])){
// proceeding code
}

这样,无论 $_GET 变量的结果如何,它仍然会继续。即使我用 (int) 尝试了下面的答案,它仍然给我相同的结果。

我确实尝试将 $_GET 变量设置为某个字符串进行测试,但这不会继续,因为我的 $_SESSION 变量1。不过,它只通过任何数字的代码进行。

谢谢

当你有一个函数处于if"等于"条件中时,你将与该函数返回的任何内容进行比较。

因此,在您的情况下,如果设置了参数,isset()将返回true,否则false返回。

这是您要比较的内容,而不是值。

很明显,在比较之前,您要检查是否设置了变量。所以先这样做,然后开始比较。喜欢这个:

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] === (int)$_GET['user'])
    // proceeding code
    }
}

来自 GET/POST/REQUEST 超全局变量的任何内容都键入为字符串,即使它仅由数字组成。如果您在 SESSION 中存储了一个实际整数,那么您的严格比较 ( === ) 将失败,因为您正在将字符串与 int 进行比较。

尝试

$_SESSION['auth'] === (int)$_GET['user']

相反,或者干脆放宽对==的比较,它不比较类型。

您正在检查$_SESSION['auth']$_GET['user']是否设置,而不是实际比较它们,请尝试

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] == $_GET['user'])
    // proceeding code
    }
}

没有看到其他代码,似乎您可能使用了错误的比较运算符。 条件表达式应传递的唯一方法是在以下情况下:

<?php
$a = 2;
if($a = 1 && $a = 5){
    echo 'yes';
}else{
    echo 'no';
}
?>

=== 的用法用于值和类型的相同比较。 有关其他参考,请参阅有关比较运算符的文档。

更新:

看到您的代码后,您的条件表达式传递的原因是,如果isset($_SESSION['auth'])的结果是True并且isset($_GET['user'])True那么它将通过,如果两者都False,则相同。 您的条件表达式仅检查isset(VARIABLE)的结果,而不检查其中的变量是否匹配。