2012-03-19 64 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