我一直在这个网站上工作,该网站应该使用带有 htpasswd 的 HTTP 基本身份验证。身份验证本身就像一个魅力,但有时(并非总是) $_SERVER['PHP_AUTH_USER'] 是空的。
我得到了改用 REMOTE_USER 的建议,它也只是不时起作用。我正在使用 PHP 作为 Apache 的 CGI 插件,不幸的是,其他任何事情都是不可能的。该站点通过 HTTPS 进行 SSL 加密。
为什么会这样?
我没有确切的解决方案,但有几个想法可能对您有所帮助。
$user = !empty($_SERVER['PHP_AUTH_USER'])
? $_SERVER['PHP_AUTH_USER']
: $_SERVER['REMOTE_USER'];
...是一个好的开始。请记住,如果您不使用Basic Realm Authentication
,则必须使用 arround Digest Realm Authentication
$_SERVER['PHP_AUTH_DIGEST']
。
您应该首先注意不要在正确的位置覆盖和检查您的变量。如果只是有人没有输入用户名,则用户名也可能为空。
如果身份验证不成功,则应确保发送Connection: close
标头。
现在要调试现象,您应该写入日志文件或向自己发送包含以下文本的邮件以进一步调查:
// variables from http://php.net/manual/en/language.variables.superglobals.php
$log = var_export(array($_SERVER, $_REQUEST, $_COOKIES, $_SESSION), true);
我还阅读了与 cgi 结合使用的其他变量集包含用户名,看看这个问题/答案:https ://stackoverflow.com/a/7792912/1948292
其他可能包含用户信息的变量(取自上面的答案):
$_SERVER['REDIRECT_HTTP_AUTHORIZATION']
$_SERVER['REDIRECT_REMOTE_USER']