将会话变量与get变量PHP进行比较

时间:2012-08-08 04:45:22

标签: php session get comparison integer

我正在尝试将$_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,因此无法继续。它只通过任何数字的代码进行。

由于

4 个答案:

答案 0 :(得分:2)

当你在if“等于”条件中有一个函数时,你将与该函数返回的函数进行比较。

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

这就是你要比较的,而不是价值。

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

if(isset($_SESSION['auth'])  && isset($_GET['user'])){

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

}

答案 1 :(得分:1)

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

尝试

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

相反,或者只是将比较放宽到==,而不是比较类型。

答案 2 :(得分:1)

如果没有看到其他代码,您可能会使用错误的比较运算符。条件表达式应该通过的唯一方法是在以下情况中:

<?php
$a = 2;

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

===的用法是对值和类型进行相同的比较。有关其他参考,请参阅comparison operators上的文档。

<强>更新

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

答案 3 :(得分:1)

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

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