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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
php获得url参数中具有&amp;的值的方法
Mar 05 PHP
php向js函数传参的几种方法
Aug 10 PHP
PHP 正则表达式常用函数
Aug 17 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP递归算法的简单实例
Feb 28 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
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
python清除字符串里非数字字符的方法
2015/07/02 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
python数据封装json格式数据
2018/03/04 Python
利用python如何处理nc数据详解
2018/05/23 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
快速查找Python安装路径方法
2020/02/06 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python实现文字版扫雷
2020/04/24 Python
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
自我介绍演讲稿范文
2014/08/21 职场文书
营销经理工作检讨书
2014/11/03 职场文书
委托书格式范文
2015/01/28 职场文书
病假条格式范文
2015/08/17 职场文书
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android