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读取数据库信息的几种方法
May 24 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
Sep 09 PHP
php连接mysql数据库
Mar 21 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
php和redis实现秒杀活动的流程
Jul 17 PHP
Yii框架实现对数据库的CURD操作示例
Sep 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
PHP 开发工具
2006/12/06 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php的4种常见运行方式
2015/03/20 PHP
php动态变量定义及使用
2015/06/10 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
php适配器模式简单应用示例
2019/10/23 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python合并字符串的3种方法
2015/05/21 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python内存动态分配过程详解
2019/07/15 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
财务工作者先进事迹材料
2014/01/17 职场文书
消防安全汇报材料
2014/02/08 职场文书
英语分层教学实施方案
2014/06/15 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
紧急通知
2015/04/17 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL