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实现Socket服务器的代码
Apr 03 PHP
php 静态变量的初始化
Nov 15 PHP
PHP中文件上传的一个问题
Sep 04 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php防止sql注入代码实例
Dec 18 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
php+mysql实现无限级分类
Nov 11 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
javaScript语法总结
2016/11/25 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
numpy.random模块用法总结
2019/05/27 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
社区志愿者活动总结
2014/06/26 职场文书
2015年新学期寄语
2015/02/26 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript