PHP的Http身份验证无法正常工作

时间:2012-03-19 23:40:59

标签: php http authentication cgi

我有Plesk服务器,其中PHP作为CGI运行。

    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>";
}

上面的脚本应该提示用户名和密码。 (是的,它确实) 输入任何用户/通行证后,应该打印它们。 (不,它总是要求用户/通行证)

如何解决?

4 个答案:

答案 0 :(得分:13)

我的一台服务器上也遇到了这个问题,以下内容为我解决了这个问题。这显然是由于使用CGI。 http://www.besthostratings.com/articles/http-auth-php-cgi.html

htaccess的:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

PHP:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

答案 1 :(得分:0)

您是否考虑使用更多标准的.htaccess / .htpassword文件(如果您使用的是Apache)? http://httpd.apache.org/docs/2.0/howto/auth.html

这里$ _SERVER ['PHP_AUTH_USER']似乎永远不会被设置,因此它将始终显示此弹出窗口。

答案 2 :(得分:0)

以下是我正在开发的任何项目中包含的文件:

<?php

// protecting page of unauthorized access

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){ 
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];

    if ($user == 'username' && $pass == 'dev'){
        return;
    }
}

header('WWW-Authenticate: Basic realm="Protected zone"');
header('HTTP/1.0 401 Unauthorized');
echo 'Login failed.';
exit;

只需将其包含在您的index.php之前。

答案 3 :(得分:0)

尝试将beow行添加到您的.htaccess文件中

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0