我一直在这个网站上工作,应该使用HTTP基本身份验证与htpasswd。身份验证本身就像一个魔咒,但有时(并不总是)$_SERVER ['PHP_AUTH_USER']是空的。我得到了使用REMOTE_USER的建议,它也只是偶尔起作用。我正在使用PHP作为Apache的CGI插件,不幸的是,其他任何东西都是不可能的。该网站通过HTTPS提供SSL加密服务。为什么会这样?
zf9nrax11#
我没有一个确切的解决方案,但有几个想法可能会帮助你。
$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报头。现在要调试现象,您应该写入日志文件或向自己发送包含以下文本的邮件以进一步调查:
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']
vs91vp4v2#
如果你在httpd.conf中有单独的HTML和CGI容器,那么确保这些指令是为CGI容器和HTML容器设置的,否则REMOTE_USER不会在CGI脚本中填充。
httpd.conf
REMOTE_USER
ProfileToken On Require valid-user
2条答案
按热度按时间zf9nrax11#
我没有一个确切的解决方案,但有几个想法可能会帮助你。
是个好的开始请记住,如果您没有使用
Basic Realm Authentication
,则必须使用Digest Realm Authentication
$_SERVER['PHP_AUTH_DIGEST']
。你应该首先注意你的变量不会在正确的位置被覆盖和检查。也有可能用户名是空的,如果有人没有输入。
如果身份验证不成功,您应该确保发送
Connection: close
报头。现在要调试现象,您应该写入日志文件或向自己发送包含以下文本的邮件以进一步调查:
我还读到,在与cgi组合时,还有其他包含用户名的变量集,看看这个问题/答案:https://stackoverflow.com/a/7792912/1948292
其他可能包含用户信息的变量(摘自上述答案):
vs91vp4v2#
如果你在
httpd.conf
中有单独的HTML和CGI容器,那么确保这些指令是为CGI容器和HTML容器设置的,否则REMOTE_USER
不会在CGI脚本中填充。