PHP in_array不起作用

lit*_*leK 0 php arrays session

我正在使用PHP in_array()函数,以便在用户可以访问特定页面时进行身份验证(使用会话).出于某种原因,它不起作用......

PHP PAGE

session_start();
require_once('../scripts/functions.php'); 
$role_auth = @$_SESSION['role_auth'];
access($role_auth, array(0,1,2,3,4));
Run Code Online (Sandbox Code Playgroud)

访问功能

function access($role_auth, $array){

if(!(in_array($role_auth, $array))){ 
   header("Location: ../index.html");
}
}
Run Code Online (Sandbox Code Playgroud)

如果我在函数中插入print语句,我可以看到所有正确的值都被传递给函数.问题是,如果在没有设置会话变量的情况下调用函数,由于某种原因,它被认为是在数组中,并且它进行了身份验证.

有任何想法吗?

Jas*_*son 9

您可能希望使用以下命令启用严格类型检查:

in_array($role_auth, $array, true)
Run Code Online (Sandbox Code Playgroud)

因为可能发生的事情是$ role_auth被eval'd为false并且在你的in_array语句中可以匹配0.

你应该做的是这样的:

session_start(); 
require_once('../scripts/functions.php'); 
$role_auth = (isset($_SESSION['role_auth']))?$_SESSION['role_auth']:-1; 
access($role_auth, array(0,1,2,3,4));
Run Code Online (Sandbox Code Playgroud)

或类似的东西.使用@运算符没有任何好处