Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用$#服务器[';脚本#名称';]进行身份验证_Php - Fatal编程技术网

Php 使用$#服务器[';脚本#名称';]进行身份验证

Php 使用$#服务器[';脚本#名称';]进行身份验证,php,Php,当用户注册时,会将默认的“成员类型”设置为“用户”。我正试图使用header.php中存储的函数,使用$\u SERVER['SCRIPT\u NAME']限制“用户”和未经身份验证的访问者对某些页面的访问 这个概念是合理的(我相信),但我真的需要一些新鲜的眼睛来帮助我解决逻辑 以下是标题中的函数: $basicAuth = array("member.php", "order.php", "logout.php"); $adminonly = array("admin.php", "v

当用户注册时,会将默认的“成员类型”设置为“用户”。我正试图使用header.php中存储的函数,使用$\u SERVER['SCRIPT\u NAME']限制“用户”和未经身份验证的访问者对某些页面的访问

这个概念是合理的(我相信),但我真的需要一些新鲜的眼睛来帮助我解决逻辑

以下是标题中的函数:

$basicAuth = array("member.php", "order.php", "logout.php");
    $adminonly = array("admin.php", "v_feedback.php", "user.php", "v_content.php", "product.php");


    restrictAccess($basicAuth, $adminonly);
以下是整个功能:

function restrictAccess($basicAuth, $adminonly){
$error = "You do not have the authentication privileges to access this area, go <a href=\"index.php\" alt=\"Home\">home</a>.";

    if (isset($_SESSION['type'])){
        $auth = "Basic";

        if($_SESSION['type']=="Admin"){
            $auth = "Admin";
        }
    } else {
        $auth = "None";
    }

    //For testing purposes
    echo $auth;



if ($auth == "None"){
    if(($_SERVER['SCRIPT_NAME']==$basicAuth)||($_SERVER['SCRIPT_NAME']==$adminonly)){
        echo $error;
        exit();
    }
}elseif($auth =="Basic"){
    if(($_SERVER['SCRIPT_NAME'])==$adminonly){
        echo $error;
        exit();
    }
}
功能限制访问($basicAuth,$adminonly){
$error=“您没有访问此区域的身份验证权限,请转到。”;
如果(isset($\u会话['type'])){
$auth=“基本”;
如果($_会话['type']==“Admin”){
$auth=“Admin”;
}
}否则{
$auth=“无”;
}
//用于测试目的
echo$auth;
如果($auth==“无”){
如果($_服务器['SCRIPT\u NAME']=$basicAuth)| |($_服务器['SCRIPT\u NAME']==$adminonly)){
echo$错误;
退出();
}
}elseif($auth==“基本”){
如果($\u服务器['SCRIPT\u NAME'])==$adminonly){
echo$错误;
退出();
}
}
}

我有一种感觉,这与我构建它的方式背后的逻辑有关,这就是错误

多谢各位

如果($\u服务器['SCRIPT\u NAME']==$basicAuth)
完全错误。 不能比较数组和字符串。
if(array\u search($\u SERVER['SCRIPT\u NAME',$basicAuth)!==FALSE)
可以使用,但最好使用键而不是值,然后
if(array\u key\u存在($\u SERVER['SCRIPT\u NAME',$basicAuth])
。 顺便问一下,将“basicAuthNeeded.php”包含到一些脚本中,将“adminAuthNeeded.php”包含到其他脚本中,而不是包含在您的方法中,不是更简单吗?
或者使用更复杂但更灵活的方法(定义一些角色、定义资源并使用一些
检查权限($role$resource)
)?

有些不合理。。你要依靠那些文件名的准确性。如果你在胡闹,临时拥有了
admin2.php
,而有人通过在浏览器中编辑url发现了这一点,该怎么办?现在他们有了管理员权限,即使这是一个他们不应该使用的文件。在发布之前,我只需要确保我的文件名是一致的。这不是一个主要的网站,只是一个小项目,但我知道这可能是一个问题。我做过类似的系统,但在页面顶部放了一段代码,调用auth函数并告诉它需要什么级别,例如
checkAccess($admin=false,$user=true,$anon=false)
。如果检查失败,函数将退出,并且永远不会到达受保护的代码。如果忘记在文件中实际调用check函数,仍然没有帮助,但至少它不依赖于特定的文件名。