我一直在研究这个应该使用htpasswd进行HTTP基本身份验证的网站。身份验证本身就像一个魅力,但有时(并非总是)$ _SERVER ['PHP_AUTH_USER']是空的。
我得到了使用REMOTE_USER的建议,这也只是时常使用。 我正在使用PHP作为Apache的CGI插件,遗憾的是其他任何事情都是不可能的。该网站通过HTTPS进行SSL加密。
为什么会这样?
答案 0 :(得分:3)
我没有一个确切的解决方案,但有一些可能对您有帮助的想法。
$user = !empty($_SERVER['PHP_AUTH_USER'])
? $_SERVER['PHP_AUTH_USER']
: $_SERVER['REMOTE_USER'];
......是一个好的开始。请注意,如果您未使用Basic Realm Authentication
,则必须使用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']