2011-02-08 91 views
6

由於某些原因,我無法使用基本身份驗證在我的服務器上使用PHP。我正在使用手冊頁中的確切代碼:使用PHP進行基本身份驗證會產生無限循環

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

但是,當我運行它時,我無法超越提示。

如果我把這個相同的代碼放在我的其他服務器上,它可以正常工作。

有誰知道可能是什麼原因造成的?這兩個服務器都是WAMP堆棧,並且Apache啓用了auth_basic_module。 PHP.ini文件實際上也是相同的。

我瞥了頭,在輸入用戶名/密碼後,發送了「Authorization:Basic XXXXXX」標頭。

+0

在兩個`php.ini`文件中嘗試`diff`,以防萬一您丟失了某些東西。你也可以比較apache confs。 – ocodo 2011-02-08 00:13:17

+0

參考:http://www.php.net/manual/en/features.http-auth.php – 2011-02-08 00:13:20

回答

9

這取決於使用的PHP接口。環境變量PHP_AUTH_USER僅用於mod_php,如果Apache幫助。

如果您從腳本初始化授權,那麼您必須查找HTTP_AUTHORIZATION標題,然後解碼並自行分割它。看看這個評論:http://www.php.net/manual/en/features.http-auth.php#94349

對於FastCGI設置或suexec invokations,你甚至可能在環境變量中沒有這個頭文件。它被過濾掉作爲安全預防措施。常見的解決方法是使用一個htaccess的規則改寫頭:

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

因此它變得可用具有混合情況下$_SERVER["HTTP_Authorization"]

相關問題