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个人网站架设连环讲(一)
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
php curl 上传文件代码实例
Apr 27 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP实现微信提现功能
Sep 30 PHP
java解析json方法总结
May 16 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
php GeoIP的使用教程
2011/03/09 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python 网络编程详解及简单实例
2017/04/25 Python
django 简单实现登录验证给你
2019/11/06 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python实现中值滤波去噪方式
2019/12/18 Python
WiFi云数码相框:Nixplay
2018/07/05 全球购物
C语言面试题
2013/05/19 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
医学院毕业生自荐信
2013/11/08 职场文书
高级销售求职信
2014/02/21 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
护士感人事迹
2014/05/01 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫