HTTP 内置基础验证。浏览器收到401状态码响应后,弹出要求输入信息的对话框。通过验证则显示内容,不通过不显示需要验证身份的内容。
1;手动HTTP基础验证:
header('http/1.1 401 Unauthorized')
此在响应头中添加401状态码。触发浏览器弹出对话框要求输入用户名&密码
想要去掉已认证的状态,重新触发下401的状态。
- <?php
- //检查有无认证信息
- // HTTP_AUTHORIZATION 值如 'Basic dXNlcjpwYXNz'
- if((!isset($_SERVER['PHP_AUTH_USER'])) && (!isset($_SERVER['PHP_AUTH_PW'])) && (substr($_SERVER["HTTP_AUTHORIZATION"],0,6) == 'Basic')){
- list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) = explode(":",base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'],6)));
- }
- //没有认证信息
- if(($_SERVER['PHP_AUTH_USER'] != 'user') ||
- ($_SERVER['PHP_AUTH_PW'] != 'pass')){
-
- header("WWW-Authenticate: Basic realm ='Zoon Name'");
- //触发浏览器内置的基础验证(弹出对话框)
- header('HTTP/1.0 401 Unauthorized(worong msg)');
- echo '你取消了';
- //有认证信息
- }else{
- ?>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Passe the basic authentication</title>
- </head>
- <body>
- Congratulation!<br>
- <?php
- // var_dump($_SERVER);
- ?>
- </body>
- </html>
-
- <?php
- }
- ?>
2;使用.htaccess实现基础验证()
.htaccess 对该目录及其子目录有效。访问带.htaccess 文件夹中的内容需要通过基础验证。
每次访问带.htaccess文件夹中的内容都会解析.htaccess 所以效率不够高
- # .htaccess文件
-
-
- <IfModule mod_rewrite.c>
-
- RewriteEngine On
-
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
-
- #增加下面的内容就可以了看到HTTP_AUTORIZATION的内容(有的话)
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
- </IfModule>
- # Prevent Apache from serving .ht* files:
- <FilesMatch "^\.ht">
- Order allow,deny
- Deny from all
- </FilesMatch>
-
-
- # 存放基础验证中的多个【用户名:密码】
- AuthUserFile D:/programfile/htaccess/.htpass
- AuthType Basic
- AuthName "this is a Realm"
- AuthBasicProvider file
- Require valid-user
- # 指定401状态码错误后跳转到的页面
- ErrorDocument 401 ../401.html
-
.htpass 存放每一组【用户名:密码]
realm 提示用户输入什么类型密码的信息(作为提示性文字)
- 命令行生成 .htpass 文件
-
- htpasswd -bc .htpass文件 user1 pwd1
- htpasswd -b .htpass文件 user2 pwd2
-c : 告知htpass工具创建一个文件(已有的话会删除 原有的并创建新文件)
-b : Force bcrypt encryption of the password (very secure) 加密密码
结果:
user1:$apr1$sEICw13A$cqDOO6ePvyId5CavrbpS0/
user2:$apr1$8EVtrYFk$H2OaSsHH/Ak/FIEs/DUfn1