9

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']は決して設定されていないと思います!何が問題なのでしょう?Ubuntu10.04LTSサーバーをで実行していますApache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server

4

3 に答える 3

22

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)));
于 2014-03-21T08:48:24.047 に答える
21

phpinfo()を実行します。「サーバーAPI」がCGI/FCGIの場合、PHPからHTTP認証を使用する賢明な方法がないため、ほとんど忘れることができます。

于 2011-08-13T21:13:27.250 に答える