2011-08-13 14 views
7

私はhttp経由で小さな認証を実装しようとしましたが、これが正しく動作するかどうかを確認するために、ネットからのコードのこのビットをコピー:HTTP認証:PHP_AUTH_USERが設定されていませんか?

<?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

を.htaccessファイルで

はこれを追加しますか? – Jonathon

+0

@Jonny Keogh:Safari 5とFirefox 5では、すでにCGI/FCGIをチェックすることで問題を解決しています。 –

答えて

15

phpinfo()を実行します。 「Server API」がCGI/FCGIの場合、PHPからのHTTP認証を使用する賢明な方法がないので、かなり忘れてしまいます。 PHP-CGI用

+1

それは問題です!ありがとう - 私を助けた。 –

15

:これを追加

<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))); 
+0

あなたの答えを主に讃えてください。これが最終的に私の問題を解決したとき、私は手首をスリットナイフを鋭利にしていました。 – Reasurria

+0

はあなたがこの行を必要としないと思われます: 'list($ _ SERVER ['PHP_AUTH_USER']、$ _SERVER ['PHP_AUTH_PW'])= explode( ':'、base64_decode(substr($ _ SERVER ['HTTP_AUTHORIZATION']、6 )))); ' – Shawn

+0

@Shawn list($ ...はリクエストしているクライアント用です。 – Azmeer

関連する問題