zoukankan      html  css  js  c++  java
  • PHP 模拟 HTTP 基本认证(Basic Authentication)

    当某个页面需要认证才能进行访问时,接到请求后服务器端会在响应头中发送一个 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

  • 相关阅读:
    [转载]Silverlight实用窍门系列:71.Silverlight的Style
    vs2010中自动实现抽象方法
    js拖拽案例、自定义滚动条
    js同步、异步、延时、无阻塞加载
    Aspose Words、Excel(xlsx)导出等操作
    echarts笔记
    IIS中报错弹出调试,系统日志-错误应用程序名称: w3wp.exe,版本: 8.5.9600.16384,时间戳: 0x5215df96(360主机卫士)
    EasyUI所有方案案例整合篇
    windows service创建使用整合
    Oracle问题整合
  • 原文地址:https://www.cnblogs.com/dee0912/p/5331142.html
Copyright © 2011-2022 走看看