PHP 模擬 HTTP 基本認證(Basic Authentication)


當某個頁面需要認證才能進行訪問時,接到請求后服務器端會在響應頭中發送一個 WWW-Authenticate 首部(用來標識認證安全域),語法為

WWW-Authenticate:Basic relam=quoted-string

客戶端接收到后會彈出一個對話框,要求輸入用戶名和密碼,用戶輸入的用戶名和密碼將會分別保存至 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 中,開發者可以設計程序驗證用戶輸入的用戶名和密碼是否正確。

當用戶輸入用戶名和密碼並且點擊確定后,請求頭會發送一個 Authorization 首部,語法為 Authorization:Basic Base64(username:password)

在 IE 下,輸入錯誤超過3次,服務器端會在響應頭中發送 401 狀態碼,提示需要授權(401 (Authorization Required)),在 Chrome 或 FireFox 下,只有用戶選擇取消輸入時,才會發送 401 狀態碼,否則對話框會一直要求輸入用戶名和密碼。

 

代碼:

 1 <?php
 2 
 3 header("Content-type: text/html; charset=utf-8");
 4 
 5 function validate($user, $pass) {
 6     $users = ['dee'=>'123456', 'admin'=>'admin'];
 7     if(isset($users[$user]) && $users[$user] === $pass) {
 8         return true;
 9     } else {
10         return false;
11     }
12 }
13 
14 if(!validate(@$_SERVER['PHP_AUTH_USER'], @$_SERVER['PHP_AUTH_PW'])) {
15     http_response_code(401);
16     header('WWW-Authenticate:Basic realm="My website"'); //對話框顯示 http://127.0.0.3 請求用戶名和密碼。信息為:My website
17     echo '需要用戶名和密碼才能繼續訪問'; //取消時瀏覽器輸出
18     exit;
19 } else {
20     var_dump($_SERVER['PHP_AUTH_USER']);
21     var_dump($_SERVER['PHP_AUTH_PW']);
22 }

訪問頁面時,彈出認證窗口:

 

選擇取消時:

 

 

輸出正確的用戶名和密碼時:

 

參考:《PHP Cookbook,3rd》P244

 


免責聲明!

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



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