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 xml文件操作实现代码(二)
Mar 20 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
php数组删除元素示例
Mar 21 PHP
详解js异步文件加载器
Jan 24 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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/js获取客户端mac地址的实现代码
2013/07/08 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
PHP实现八皇后算法
2019/05/06 PHP
javascript回车完美实现tab切换功能
2014/03/13 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
浅谈python多线程和队列管理shell程序
2015/08/04 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python入门之后再看点什么好?
2018/03/05 Python
python实现键盘控制鼠标移动
2020/11/27 Python
在django view中给form传入参数的例子
2019/07/19 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python 多进程队列数据处理详解
2019/12/23 Python
python关于调用函数外的变量实例
2019/12/26 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
给女朋友的道歉短信
2015/05/12 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技