PHP 的 header() 函数用于向客户端浏览器发送 “Authentication Required” 消息,使其弹出一个 Username/Password 输入窗口。事实上,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
/* 重定向浏览器 */
header("Location: http://www.example.com/");
/* 确保重定向时不会执行下面的代码。 */
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 '用户点击取消按钮';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>你输入 {$_SERVER['PHP_AUTH_PW']} 作为密码</p>";
}
?>
输出
当您在浏览器中访问脚本时,它会弹出一个对话框,如下所示 -
单击登录按钮后,可能会有一个后端脚本来验证登录凭据。通过身份验证后,将使用键 PHP_AUTH_USER 和 PHP_AUTH_PW 创建两个服务器变量,这可以通过 phpinfo() 函数的输出进行验证。