当某个页面需要认证才能进行访问时,可以发送一个包含 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
时间: 2024-10-03 13:47:09