数组中的PHP不工作

数组中的PHP不工作,php,arrays,session,Php,Arrays,Session,我使用PHP in_array()函数来验证(会话)用户是否可以访问特定页面。由于某种原因,它不起作用 PHP页面 访问功能 如果我在函数中插入print语句,我可以看到所有正确的值都被传递到函数中。问题是,如果在没有会话变量集的情况下调用函数,出于某种原因,它会被视为在数组中,并进行身份验证 有什么想法吗 我会检查$\u SESSION['role\u auth']是否已实际设置(使用isset),而不是使用@来抑制警告(这是错误的做法IMHO) 我想现在发生的是false==0。。。因此,当

我使用PHP in_array()函数来验证(会话)用户是否可以访问特定页面。由于某种原因,它不起作用

PHP页面 访问功能 如果我在函数中插入print语句,我可以看到所有正确的值都被传递到函数中。问题是,如果在没有会话变量集的情况下调用函数,出于某种原因,它会被视为在数组中,并进行身份验证


有什么想法吗

我会检查$\u SESSION['role\u auth']是否已实际设置(使用
isset
),而不是使用@来抑制警告(这是错误的做法IMHO)

我想现在发生的是false==0。。。因此,当$role\u auth中没有任何内容时,数组中的
将返回true,因为它将其视为0,并且0在数组中

 $role_auth = @$_SESSION['role_auth'];
@符号正在抑制您在此处可能得到的任何警告,就像索引不在数组中一样。不如换成这样:

 if(isset($_SESSION['role_auth']))
    $role_auth = $_SESSION['role_auth'];
 else
    $role_auth = -1;//(or whatever an invalid role is)

您可能希望通过以下方式启用严格的类型检查:

in_array($role_auth, $array, true)
由于可能发生的情况是$role_auth被评估为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));

或者类似的东西。在php中使用@operator从来没有什么好处,零被认为与大多数非数字的东西相等,例如:

null   == 0
false  == 0
""     == 0
"asdf" == 0

您可能需要事先确保
$\u SESSION
实际上包含
'role\u auth'
键,并将其转换为适当的类型,同时将
$strict
参数传递给数组中的
,从而保证类型检查和值检查(
==
vs.
=
)。从数组中删除零也可能是一个好主意。

只是一个提示,您可以使用
范围(0,4)
而不是
数组(0,1,2,3,4)
。关于安全检查的简要说明。确保在发送标题后调用die()或exit(),因为脚本中随后的内容仍将被发送。当php在后台打开或关闭错误报告时,@在性能方面也相当昂贵。这让我感到惊讶!,0==“asdf”OMFG!!:@天哪!!,自创建以来,此行为影响了我的整个web应用程序!(股票和序列码相关),现在我修补了这个,并进行了一致性检查。。。(一切正常!)说真的,我将提名诺亚·梅德林为年度风云人物=P
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));
null   == 0
false  == 0
""     == 0
"asdf" == 0