我试图通过http实现一个小的身份验证,并从网上复制这段代码来检查这是否能正常工作:
<?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>";
}
?>
但是,我的浏览器总是要求输入用户名和密码,但在我取消之前不会输出任何内容。因此,我认为$_SERVER['PHP_AUTH_USER']
永远不会被设定!可能是什么问题?我正在使用Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server
运行Ubuntu 10.04 LTS服务器。
答案 0 :(得分:18)
运行phpinfo()。如果“服务器API”是CGI / FCGI,你几乎可以忘记它,因为没有合理的方法来使用PHP的HTTP身份验证。
答案 1 :(得分:16)
对于PHP-CGI:
在.htaccess中添加:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
并在脚本开头添加:
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
答案 2 :(得分:0)
启用PHP-FPM,它将开始工作。
$valid_passwords = array ("test" => "test");
$valid_users = array_keys($valid_passwords);
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if (!$validated) {
header('WWW-Authenticate: Basic realm="Test"');
header('HTTP/1.0 401 Unauthorized');
die ("Not authorized");
}