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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
在PHP里得到前天和昨天的日期的代码
Aug 16 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
Dec 16 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php提交表单发送邮件的方法
Mar 20 PHP
PHP连接access数据库
Mar 27 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
学习PHP的数组总结【经验】
May 05 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 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下使用SimpleXML 处理XML 文件
2010/02/27 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
javascript 闭包
2011/09/15 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Python中文编码那些事
2014/06/25 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Linux中如何用命令创建目录
2015/01/12 面试题
行政人员工作职责
2013/12/05 职场文书
心得体会范文
2014/01/04 职场文书
英语自我评价范文
2014/01/24 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js