PHP HTTP 认证实例详解


Posted in PHP onNovember 03, 2016

HP来实现HTTP的强制认证是十分简单的,只需简单的几行代码就可以实现,下面我们来看一个例子,然后结合这里例子我向大家详细介绍一下PHP实现HTTP认证。

<?php
 if(!isset($_SERVER['PHP_AUTH_USER'])) {
 header('WWW-Authenticate: Basic realm="系统名称"');
 header('HTTP/1.0 401 Unauthorized');
 echo '未通过HTTP认证.';
 exit;
 }
 else {
 echo '认证通过.';
 echo '用户名: '.$_SERVER['PHP_AUTH_USER']."\n";
 echo '密码: '.$_SERVER['PHP_AUTH_PW']."\n";
 }
?>

1.实现说明

怎么样,看到上面的代码了吧,就这么几行添加到你的程序页面上就可以实现了.
它是通过利用header()函数向客户端浏览器发送”Authentication Required”信息,强制其弹出一个用户名/密码输入窗口,当用户输入用户名和密码后,包含有URL的PHP脚本将会加上预定义变量PHP_AUTH_USER, PHP_AUTH_PW和AUTH_TYPE然后再次调用,这三个变量分别表示用户名,密码和认证类型(从PHP5.0.1起开始支持”Basic”和”Digest”两种认证方式),它们被保存在$_SERVER(从HP>>4.1.0起有效)或$HTTP_SERVER_VARS(从PHP3起有效)数组中具体应用时,我们可以把验证的几行代码写成函数,只要判断到用户变量不存在或验证不正确就一直执行该函数并弹出窗口,而且还可以设置错误登录几次就不允许该用户访问,具体的使用大家使劲的发散思考吧.

 2.注意事项:

1.这段代码必须放到程序的开始,且在其开始执行之前不能有任何输出(若有输出则需要使用输出缓冲函数才行).

2.PHP的HTTP认证机制仅在PHP以Apache模块方式运行时才有效,这个容易理解,它本身是HTTP强制认证,肯定是不适合于CGI版本,不能在命令行下执行的.

3.header发送标头代码时请小心.为了对所有的客户端保证兼容性,关键字”Basic”的第一个字母必须大写为”B”,分界字符串必须用双引号引用(不能是单引号);在HTTP/1.0和401之间必须有且仅有一个空格.

4.在上面列子中,仅输出了用户名和密码,而在实际系统中则可按照登录验证流程进行与数据库或其他方式进行判断和验证.

5.从PHP4.3.0起,为防止有人通过编写脚本来从页面上获取密码,当外部认证对特定页面有效,并且安全模式被开启时,PHP_AUTH变量将不会被设置.可以用REMOTE_USER来辨别外部认证的用户,用AuthType指令来判断外部认证机制是否有效.

6.要想让HTTP认证能够在IIS下工作,PHP配置选项cgi.rfc2616_headers必须设置为0(默认值).

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
一段php加密解密的代码
Oct 09 PHP
PHP4实际应用经验篇(7)
Oct 09 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
PHP四种基本排序算法示例
Apr 09 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
PHP命名空间和自动加载类
Apr 03 PHP
php通过header发送自定义数据方法
Jan 18 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
PHP实现简易图形计算器
Aug 28 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 #PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 #PHP
php 使用redis锁限制并发访问类示例
Nov 02 #PHP
Android AsyncTack 异步任务实例详解
Nov 02 #PHP
php array_pop 删除数组最后一个元素实例
Nov 02 #PHP
PHP设置images目录不充许http访问的方法
Nov 01 #PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 #PHP
You might like
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
一个php作的文本留言本的例子(三)
2006/10/09 PHP
php 错误处理经验分享
2011/10/11 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
python中global与nonlocal比较
2014/11/21 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
网络编辑职责
2014/03/01 职场文书
企业安全生产承诺书
2014/05/22 职场文书
镇创先争优活动总结
2014/08/28 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python