PHP_AUTH_USER 和 PHP_AUTH_PW 實現登錄驗證


最近查看公司的CodeBase,看到有這樣的一行:

if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']))

其中的 PHP_AUTH_USERPHP_AUTH_PW 不知道是什么東西,網上查了一下,發現挺有意思的,現在記錄總結一下。

要獲取 $_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW'] ,首先需要使用 PHP 的 header() 函數設置兩個響應頭,如下:

Header('WWW-Authenticate: Basic realm="USER LOGIN"');
Header('HTTP/1.0 401 Unauthorized');

設置了這兩個響應頭,網頁在載入前就會出現一個登錄框,要求輸入用戶名和密碼。

為了獲取從這個登錄框中傳來的用戶名和密碼,需要用到 PHP 提供的兩個特殊變量 $_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']

通過這兩個變量拿到用戶輸入的用戶名和密碼,就可以做進一步的操作。比如下面這個小小的Demo:

<?php
if ( !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ) {
    header('WWW-Authenticate: Basic realm="USER LOGIN"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Please input username and password.';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

用這種方式實現的登錄驗證,目前發現如下缺點:

  • 關閉瀏覽器窗口,登錄就會斷開,重新打開就要重新登錄
  • 無法在網頁中實現點擊一個按鈕來退出登錄
  • cookiesession 的那種方式對比,這種方式只能獲取到用戶的賬號和密碼,無法在服務端保存用戶相關的其他數據

如果發現文章中有不對的地方,歡迎在評論區指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM