PHP 模拟 HTTP 基本认证(Basic Authentication)
2023-09-11 14:17:03 时间
当某个页面需要认证才能进行访问时,接到请求后服务器端会在响应头中发送一个 WWW-Authenticate 首部(用来标识认证安全域),语法为
WWW-Authenticate:Basic relam=quoted-string
客户端接收到后会弹出一个对话框,要求输入用户名和密码,用户输入的用户名和密码将会分别保存至 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 中,开发者可以设计程序验证用户输入的用户名和密码是否正确。
当用户输入用户名和密码并且点击确定后,请求头会发送一个 Authorization 首部,语法为 Authorization:Basic Base64(username:password)
在 IE 下,输入错误超过3次,服务器端会在响应头中发送 401 状态码,提示需要授权(401 (Authorization Required)),在 Chrome 或 FireFox 下,只有用户选择取消输入时,才会发送 401 状态码,否则对话框会一直要求输入用户名和密码。
代码:
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-CPP开发扩展(一)
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
- PHP安装模式cgi、fastcgi、php_mod比较
- PHP 性能优化 - php.ini 配置
- 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)
- php:如何使用PHP排序, key为字母+数字的数组(多维数组)
- 以源码编译的方式安装PHP与php-fpm
- php:用数组实现多语言(PHP 7.4.2)
- file not found. nginx php nginx 如何开启解析 PHP 的功能
- php 如何隐藏图片的真实地址
- 使用php模拟form上传文件
- php:在linux上用sudo提升权限(centos 8 / PHP 7.4.2)
- phpExcel常用方法详解【附有php导出excel加超级链接】
- PHP反序列化详解(二)——PHP魔术方法与PHP反序列化漏洞
- [PHP] Nginx与PHP的文件上传大小限制
- Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
- PHP中变量类型的判断
- PHP中冒号、endif、endwhile、endfor使用介绍
- CentOS下yum安装PHP,配置php-fpm服务
- PHP CLI模式下的多进程应用分析
- PHP下载远程图片的3个方法
- php去除换行符的方法小结(PHP_EOL变量的使用)
- PHP多进程编之pcntl_fork的实例详解