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
广告