isset和if函数在php中使用或运算符

时间:2016-04-02 17:06:03

标签: php if-statement cookies

我有一些PHP代码来检查用户登录状态,检查是否设置了会话变量或设置了cookie。如果其中一个条件为真,那么它将获得盛大权限,否则将重定向到登录页面。代码如下所示:

if(isset($_SESSION["userid"]) || isset($_COOKIE["userid"]) && isset($_SESSION["username"]) || isset($_COOKIE["username"])  && isset($_SESSION["password"]) || isset($_COOKIE["password"])){
} else {
header("location : register.php");
}

问题是如果会话被破坏(通过关闭浏览器或任何其他原因),它会将用户重定向到登录页面。但它必须做的是读取cookie数据并授予用户访问权限,因为cookie仍然存在(我已经检查过echo cookie数据仍然存在cookie)。

4 个答案:

答案 0 :(得分:2)

&&的优先级高于||,因此您需要使用括号来保护||。此外,使用空if语句只是多余的:

if(!(isset($_SESSION["userid"]) || isset($_COOKIE["userid"]) ||   
   !(isset($_SESSION["username"]) || isset($_COOKIE["username"])) || 
   !(isset($_SESSION["password"]) || isset($_COOKIE["password"]))) {
    header("location : register.php");
}

答案 1 :(得分:1)

您需要添加几个断路器来对您的陈述进行分组,如下所示:

    if( 
    ( isset($_SESSION["userid"]) || isset($_SESSION["username"]) && isset($_SESSION["password"]) ) 
||
    ( isset($_COOKIE["userid"]) || isset($_COOKIE["username"]) && isset($_COOKIE["password"]) )
){
    // Your action
} else {
header("location : register.php");
}

此类声明将检查是否设置了COOKIE或SESSION并检查或user_id或用户名和密码。 如果你需要AND user_id AND username而不是replace ||在此字段的isset()函数之间的括号中。

答案 2 :(得分:1)

您需要稍微更改一下条件,因为您在SESSIONCookie内混淆了它。将它们与&&放在一起,并将其与||分开,如下所示: -

if((isset($_SESSION["userid"]) &&  isset($_SESSION["username"]) && isset($_SESSION["password"])) || (isset($_COOKIE["userid"]) && isset($_COOKIE["username"])  && isset($_COOKIE["password"]))){

    // your action that you want

} else {

   header("location : register.php");
}

注意: - 注意相同的事情将适用于所有地方(在其他页面和条件上),否则您将面临问题。

cookie的依赖程度也不高,因为用户可以随时更改。

答案 3 :(得分:1)

我认为您的if条件缺少一些括号。为了使代码更具可读性,您可以创建两个函数

function isSessionValid()
{
    return isset($_SESSION["userid"]) && isset($_SESSION["username"]) && isset($_SESSION["password"]);
}

function isCookieValid()
{
    return isset($_COOKIE["userid"]) && isset($_COOKIE["username"]) && isset($_COOKIE["password"]);
}

然后在if语句中使用这些函数:

if (isSessionValid() || isCookieValid()) {

} else {

}