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 缩略图实现函数代码
Jun 23 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php获取网页上所有链接的方法
Apr 03 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 PHP
php面向对象编程self和static的区别
May 08 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
php利用gd库为图片添加水印
Nov 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
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
js select常用操作控制代码
2010/03/16 Javascript
js切换div css注意的细节
2012/12/10 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
JS求平均值的小例子
2013/11/29 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
TensorFlow如何实现反向传播
2018/02/06 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
python实现AES加密和解密
2019/03/27 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
老公爱的承诺书
2014/03/31 职场文书
企业趣味活动方案
2014/08/21 职场文书
MySQL视图概念以及相关应用
2022/04/19 MySQL
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL