如何检查$ _COOKIE是填充还是空?

时间:2017-08-07 22:35:28

标签: php cookies

我只是想检查$_COOKIE是否有我的实际cookie。

在Stackoveflow上我读了很多关于不使用empty()的内容,因为它在给出0时返回true,这可能是cookie的情况。还有更多,请参阅:LainIwakura's answer

如果我的客户尝试访问某个网页并且他没有cookie,那么他应该被阻止。

public function index($request, $response)
{           
    if($_COOKIE != " ") {       
        // Okay
    } else {        
        return "Please log in first";
    }        
}

如果我var_dump[$_COOKIE]我明白了:

array(0) 
{ 
} 

当我先登录时,我明白了:

array(1) {
  ["AuthSession"]=>
  string(44) "Ym9iOjU5ODhFN0E2Ov0k6qKicxKpkePKi1AjlXglURFm"
}

我的if($_COOKIE != " ")无法正常工作,empty()也不是此案例的解决方案。 if(isset($_COOKIE))也不起作用,因为似乎总是有一个这个变量的实例,无论它是否被填充。从您的意见中检查cookie是否存在,需要采用哪种解决方案?

2 个答案:

答案 0 :(得分:2)

最好的方法是检查您正在创建的实际cookie('AuthSession')是否已设置,而不是检查$ _COOKIE是否已设置或具有计数> 0.如果您没有明确地创建该cookie,则不会设置它,这与$ _COOKIE不同。

public function index($request, $response)
{           
    if(isset($_COOKIE['AuthSession']) {       
        // Okay
    } else {        
        return "Please log in first";
    }        
}

答案 1 :(得分:0)

使用:

isset( $_COOKIE )

查看是否有cookie

使用

( count( $_COOKIE ) === 0 ) === FALSE

检查它是否为空

因此,您的代码应如下所示:

public function index($request, $response)
{           
    if( isset( $_COOKIE ) and ( ( count( $_COOKIE ) === 0 ) === FALSE ) ) {       
        // Okay
    } else {        
        return "Please log in first";
    }        
}