2017-08-07 66 views
0

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

关于Stackoveflow我读了很多关于不使用empty(),因为它返回true当给出0时,可能是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

最好的方法是检查您创建的实际cookie('AuthSession')是否已设置,而不是检查$ _COOKIE是否设置或计数> 0。如果您没有明确地创建了这个cookie,它不会被设置,这与$ _COOKIE不一样。

public function index($request, $response) 
{   
    if(isset($_COOKIE['AuthSession']) {  
     // Okay 
    } else {   
     return "Please log in first"; 
    }   
} 
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"; 
    }   
}