PHP 模拟 HTTP 基本认证(Basic Authentication)

Posted Meadows of Heaven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 模拟 HTTP 基本认证(Basic Authentication)相关的知识,希望对你有一定的参考价值。

当某个页面需要认证才能进行访问时,可以发送一个包含 WWW-Authenticate 首部(用来标识认证安全域)的响应,并且响应的 HTTP 状态码为 401;

当浏览器看到一个 401 首部时,会弹出一个对话框,要求输入用户名和密码。如果用户输入了用户名和密码,那么用户输入的用户名和密码将会分别保存至 $_SERVER[‘php_AUTH_USER‘] 和 $_SERVER[‘PHP_AUTH_PW‘] 中,开发者可以设计程序验证用户输入的用户名和密码是否正确。

 

代码:

 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

 

以上是关于PHP 模拟 HTTP 基本认证(Basic Authentication)的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别

Http Basic认证

HTTP认证之基本认证——Basic

详解BASIC认证

HTTP Authorization 之 Basic Auth