2012-03-19 93 views
2

我有Plesk Server,其中PHP作爲CGI運行。使用PHP進行Http身份驗證不起作用

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

上面的腳本應該提示用戶名和密碼。 (是的) 輸入任何用戶/密碼後,應打印它們。 (不,它總是要求用戶/通行證)

如何解決它?

+0

是頭部的第一件事是輸出? (標題必須是第一個輸出或他們不會工作)(除非你有輸出緩衝打開) – nathanjosiah 2012-03-19 23:43:25

+0

從未發送的頭, – mahaidery 2012-03-20 02:01:27

+0

PHP版本/ Web服務器名稱/版本請... – DaveRandom 2012-03-20 14:35:09

回答

0

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

這裏$ _SERVER ['PHP_AUTH_USER']看起來從來沒有設置,所以它會一直顯示這個彈出。

+0

HTPASSWRD從來沒有在這裏工作,這就是爲什麼我決定使用PHP AUTH – mahaidery 2012-03-20 01:43:52

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先天下之憂。

+0

nopes,沒有工作,我使用相同的方法... – mahaidery 2012-03-20 02:05:41

+0

我使用它,它在我的多臺服務器上完美地工作。也許你的配置不同。 – s3v3n 2012-03-20 03:14:01

10

我在我的一臺服務器上也有這個問題,下面解決了我的問題。這顯然是由於使用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

謝謝!爲我解決它。該網站由德國託管服務提供商1&1託管 – maddob 2015-03-28 00:47:47