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 insert语法详解
Jun 07 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
php发送post请求函数分享
Mar 06 PHP
php验证session无效的解决方法
Nov 04 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
深入浅析php json 格式控制
Dec 24 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
php判断目录存在的简单方法
Sep 26 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中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
django定期执行任务(实例讲解)
2017/11/03 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python pickle模块实现对象序列化
2019/11/22 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
信息技术教学反思
2014/02/12 职场文书
部队党性分析材料
2014/02/16 职场文书
新闻学专业求职信
2014/07/28 职场文书
班主任寄语2015
2015/02/26 职场文书
爱国影片观后感
2015/06/18 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS