PHP – HTTP 身份驗證



在 PHP 中,`header()` 函式用於向客戶端瀏覽器傳送“需要身份驗證”的訊息,從而彈出使用者名稱/密碼輸入視窗。事實上,`header()` 允許你傳送任何原始 HTTP 頭。

header(string $header, bool $replace = true, int $response_code = 0): void

字串引數傳遞給 `header()` 函式。例如:

header("HTTP/1.1 404 Not Found");

它用於確定要傳送的 HTTP 狀態碼。

你也可以使用 `header()` 函式將瀏覽器重定向到另一個 URL。

一旦使用者填寫了使用者名稱和密碼,包含 PHP 指令碼的 URL 將再次被呼叫,預定義變數 `PHP_AUTH_USER`、`PHP_AUTH_PW` 和 `AUTH_TYPE` 分別設定為使用者名稱、密碼和身份驗證型別。這些預定義變數可以在 `$_SERVER` 陣列中找到。“Basic” 和 “Digest” 身份驗證方法是唯一受支援的。

<?php

   /* Redirect browser */
   header("Location: http://www.example.com/"); 

   /* Make sure that code below does not get executed when we redirect. */
   exit;
   
?>

可選的 `replace` 引數指示頭是否應該替換之前的類似頭,或者新增第二個相同型別的頭,而 `response_code` 引數強制將 HTTP 響應程式碼設定為指定的值。

為了能夠強制客戶端身份驗證,你需要在文件根目錄中有一個 `.htaccess` 檔案。開啟一個新的文字檔案,將以下文字放入其中,並將其另存為 `.htaccess`。

CGIPassAuth On

示例

一個強制客戶端在一個頁面上進行身份驗證的示例指令碼片段如下:

<?php
   if (!isset($_SERVER['PHP_AUTH_USER'])) {
      header('WWW-Authenticate: Basic realm="My Realm"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'User hits Cancel button';7
      exit;
   } else {
      echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
      echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
   }
?>

輸出

當你在瀏覽器中訪問該指令碼時,會彈出一個對話方塊,如下所示:

PHP HTTP Authentication 1

單擊“登入”按鈕後,可能會有一個後端指令碼來驗證登入憑據。驗證後,將建立兩個伺服器變數,鍵分別為 `PHP_AUTH_USER` 和 `PHP_AUTH_PW`,可以使用 `phpinfo()` 函式的輸出進行驗證。

PHP HTTP Authentication 2
廣告