HTTP验证通过PHP - PHP_AUTH_USER未设置?

Chr*_*vic 8 php authentication server-variables http

我试图通过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>";
    }
?>
Run Code Online (Sandbox Code Playgroud)

但是,我的浏览器总是要求输入用户名和密码,但在我取消之前从不输出任何内容.因此,我认为$_SERVER['PHP_AUTH_USER']永远不会设置!可能是什么问题?我正在运行Ubuntu 10.04 LTS服务器Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server.

And*_*ong 18

运行phpinfo().如果"服务器API"是CGI/FCGI,你几乎可以忘记它,因为没有合理的方法来使用PHP的HTTP身份验证.

  • 实际上,它可以与 FastCGI 一起使用。在这里查看我的答案:/sf/answers/3970069001/ (2认同)

Ted*_*ddy 17

对于PHP-CGI:

在.htaccess中添加:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

并在脚本的开头添加:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
Run Code Online (Sandbox Code Playgroud)

  • 看起来你不需要这一行: `list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6) ));` (2认同)