PHP的基本身份验证提供了无限循环

Bra*_*on0 7 php authentication basic-authentication

出于某种原因,我无法在我的服务器上使用PHP进行基本身份验证.我正在使用手册页中的确切代码:

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我永远无法超越提示.

如果我将相同的代码放在我的其他服务器上,它可以正常工作.

有谁知道是什么原因引起的?两个服务器都是WAMP堆栈,Apache启用了auth_basic_module.PHP.ini文件几乎完全相同.

我浏览了标题,在输入用户名/密码后,发送了"授权:基本XXXXXX"标题.

mar*_*rio 9

这取决于使用的PHP接口.环境变量PHP_AUTH_USER仅用于mod_php,如果Apache有帮助的话.

如果从脚本初始化授权,则必须查找HTTP_AUTHORIZATION标头,然后自行解码并拆分.看看这条评论:http://www.php.net/manual/en/features.http-auth.php#94349

对于FastCGI设置或suexec调用,您可能甚至没有在环境变量中出现该标头.它被过滤掉作为安全预防措施.常见的解决方法是使用.htaccess规则重写标头:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Run Code Online (Sandbox Code Playgroud)

因此它可以用混合情况作为$_SERVER["HTTP_Authorization"].