我一直在该站点上使用htpasswd使用HTTP基本身份验证.身份验证本身就像一个超级按钮,但是有时(并非总是)$_SERVER [‘PHP_AUTH_USER’]为空.
我得到了使用REMOTE_USER的建议,该建议也有时会起作用.
我使用PHP作为Apache的CGI插件,不幸的是没有其他问题.通过HTTPS为该站点提供SSL加密的SSL.
为什么会这样呢?
解决方法:
我没有确切的解决方案,但是有一些想法可能会对您有所帮助.
$user = !empty($_SERVER['PHP_AUTH_USER'])
? $_SERVER['PHP_AUTH_USER']
: $_SERVER['REMOTE_USER'];
…是一个好的开始.请记住,如果您不使用基本领域认证,则必须使用摘要领域认证$_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://*.com/a/7792912/1948292
其他可能包含用户信息的变量(取自上面的答案):
$_SERVER['REDIRECT_HTTP_AUTHORIZATION']
$_SERVER['REDIRECT_REMOTE_USER']