PHP教程
+ -

PHP HTTP认证

2019-09-09 4 0

我们浏览的网页一般采用超文本传输协议HTTP,它是用于互联网上向网络浏览器传输网页的传输协议。
但HTTP也有自己的一套认证机制,如同开启了验证,会弹出对话框,需要用户输入用户名和密码,只有验证通过了才可以继续浏览网页。
PHP中,当一个动态网页(以PHP结尾的文件)被请求时,会用全局变量(系统自定义)来存储验证的用户名和密码。

  • $_SERVER[‘PHP_AUTH_USER’] 用于验证提交的用户名
  • $_SERVER[‘PHP_AUTH_PW’] 用于存储验证提交的密码

如果当前提交的用户名和密码验证失败,则可以拒绝继续访问网页。

<?php
$authorization = false;
if($_SERVER['PHP_AUTH_USER'] == "admin" && $_SERVER['PHP_AUTH_PW'] == "123")
{
    echo "login";
    $authorization = true;
}
if(!$authorization)
{
    header("WWW-Authenticate:Basic realm='Private'");
    header('HTTP/1.0 401 Unauthorized');
    print "You are unauthorized to enter this area.";
}
?>

那么我们再深入地讨论一下,整个过程的细节是怎么时行协议交互的呢?

1.首先,我们在浏览器中输入有验证机制的网页时,浏览器会发送GET方式的HTTP协议。
格式不懂的大家可以在网页中搜索查看一下http协议

GET /test.php HTTP/1.1
Host: www.bytekits.com

2.服务器收到来自客户端的请求后,服务器解析PHP文件,在PHP文件中发现用户名和密码验证失败,故返回给客户端401状态码。
服务器的响应如下:

HTTP/1.1 401 Authorization Required
Data:Sun,25,Feb 2018 15:51:20 GMT
Server:Apache/1.3.27 (Unix) PHP/4.3.1
X-Powerd-By: PHP/4.3.1
WWW-Authenticate: Basic realm="PHP Secured"
Connection:close
Content-Type: text/html

没有传输太多的信息,但我们注意到状态码

HTTP/1.1 401 Authorization RequiredWWW-Authenticate: Basic realm=”PHP Secured”
这些HTTP返回元素都表明了此文件需要进行HTTP的安全保护验证。这时浏览器解析返回一个请输入用户名和密码的对话框,当输入正确后,浏览器第二次进行数据提交,这次提交变成了

GET /test.php HTTP/1.1
Host: www.bytekits.com
Authorization:Basic xxxxxx

Basic后的xxxxx是实际用户输入后的用户名和密码Base64后的字符串,这时服务器收到此请求后,解析出用户名和密码到$_SERVER对应的数组进行二次验证,如通过则正常访问网页,如失败,则重复返回401状态码进行验证。

0 篇笔记 写笔记

PHP HTTP认证
我们浏览的网页一般采用超文本传输协议HTTP,它是用于互联网上向网络浏览器传输网页的传输协议。但HTTP也有自己的一套认证机制,如同开启了验证,会弹出对话框,需要用户输入用户名和密码,只有验证通过了才可以继续浏览网页。在PHP中,当一个动态网页(以PHP结尾的文件)被请求时,会用全局变量(系统自定义......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!