簡體   English   中英

PHP的Http身份驗證無法正常工作

[英]Http Authentication with PHP not working

我有Plesk服務器,其中PHP作為CGI運行。

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

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

怎么解決?

我在我的一台服務器上也遇到了這個問題,以下內容為我解決了這個問題。 這顯然是由於使用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)));

這是我在正在開發的任何項目中的任何內容之前包含的文件:

<?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之前。

嘗試將beow行添加到.htaccess文件中

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

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

這里$ _SERVER ['PHP_AUTH_USER']似乎永遠不會被設置,因此它將始終顯示此彈出窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM