基本身份验证在localhost中有效,但在Production Server中失败

时间:2015-02-06 15:47:12

标签: php basic-authentication

我在PHP中有以下代码,

<?php
ob_start();
$valid_passwords = array ("matrixUlt" => "$ecurEh1FIVE");
$valid_users = array_keys($valid_passwords);
$user = $pass = null;
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];
}
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if(!$validated)
{
header('WWW-Authenticate: Basic realm="You need to be authenticated to access the resource!"');
header('HTTP/1.0 401 Unauthorized');
exit("Not authorized");
echo ob_get_clean();
}

当这[[&#34; matrixUlt&#34; =&gt;&#34; $ ecurEh1FIVE&#34;]用户名:密码被给出时,这在localhost中正常工作。但是在LIVE服务器/生产环境中一直显示auth对话框任何想法为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

对不起整个混乱&amp;混乱,我在生产中运行CGI / FastCGI 。因此,在运行此FastCGI的PHP中无法使用HTTP AUTHENTICATION

这个StackOverflow回答给了我提示https://stackoverflow.com/a/7053320/1786360;我在PHP手册中没有注意到这个,因为它在那里缺失。

答案 1 :(得分:0)

检查您的服务器是否设置了PHP_AUTH_USER和PHP_AUTH_PW 如果没有,对话框将继续要求它 为了解决这个问题,您需要在.htaccess中添加以下代码

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

希望它能解决您的问题。