lit*_*leK 0 php arrays session
我正在使用PHP in_array()函数,以便在用户可以访问特定页面时进行身份验证(使用会话).出于某种原因,它不起作用......
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语句,我可以看到所有正确的值都被传递给函数.问题是,如果在没有设置会话变量的情况下调用函数,由于某种原因,它被认为是在数组中,并且它进行了身份验证.
有任何想法吗?
您可能希望使用以下命令启用严格类型检查:
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)
或类似的东西.使用@运算符没有任何好处