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的面试题集,附我的答案和分析(一)
Nov 19 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
golang 调用 php7详解及实例
Jan 04 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
laravel配置Redis多个库的实现方法
Apr 10 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 文件编程综合案例-文件上传的实现
2013/07/03 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
dojo随手记 gird组件引用
2011/02/24 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python struct模块解析
2014/06/12 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python如何保证输入键入数字的方法
2019/08/23 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
python基于openpyxl生成excel文件
2020/12/23 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
大学生学习党课思想汇报
2014/01/03 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
施工单位安全责任书
2014/07/24 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
廉政承诺书
2015/01/19 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2015年工商所工作总结
2015/05/21 职场文书
学习心得体会
2019/06/20 职场文书
成人成长感言如何写?
2019/08/16 职场文书