PHP HTTP 认证实例详解

 更新时间:2016年11月03日 08:33:10   投稿:lqh  
这篇文章主要介绍了PHP HTTP 认证实例详解的相关资料,这里附有实现代码,及对认证的知识做一个详细的介绍说明,需要的朋友可以参考下

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中使用GD库绘制折线图 折线统计图的绘制方法

    PHP中使用GD库绘制折线图 折线统计图的绘制方法

    本文通过代码给大家介绍php中使用GD库绘制折线图,涉及到php中GD库的一些简单使用,本文介绍的非常详细,感兴趣的朋友一起学习吧
    2015-11-11
  • PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程

    PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程

    面向对象程序设计(OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
    2014-06-06
  • Yii2 queue的队列使用详解

    Yii2 queue的队列使用详解

    这篇文章主要介绍了Yii2 queue的队列使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Laravel服务容器绑定的几种方法总结

    Laravel服务容器绑定的几种方法总结

    这篇文章主要给大家介绍了关于Laravel服务容器绑定的几种方式,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • Joomla语言翻译类Jtext用法分析

    Joomla语言翻译类Jtext用法分析

    这篇文章主要介绍了Joomla语言翻译类Jtext用法,结合实例分析了语言翻译类Jtext的基本原理与使用方法,需要的朋友可以参考下
    2016-05-05
  • php去除HTML标签实例

    php去除HTML标签实例

    在php中要去除字符串中的HTML标签方法有很多种,最常用的就是使用strip_tags函数一并去了,只保留字符了,还在就是有选择性的去除了这里要用正则表达式了,下面写二个php去除HTML标签的小例子
    2013-11-11
  • PHP写微信公众号文章页采集方法

    PHP写微信公众号文章页采集方法

    给大家分析一下如何用PHP写出采集微信公众号文章的方法以及代码详细讲解,需要的朋友学习一下。
    2017-12-12
  • Yii 实现数据加密和解密的示例代码

    Yii 实现数据加密和解密的示例代码

    这篇文章主要介绍了Yii 实现数据加密和解密的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Yii2中OAuth扩展及QQ互联登录实现方法

    Yii2中OAuth扩展及QQ互联登录实现方法

    这篇文章主要介绍了Yii2中OAuth扩展及QQ互联登录的方法,实例分析了OAuth扩展的相关配置与QQ互联登陆的实现技巧,需要的朋友可以参考下
    2016-05-05
  • 三个思路解决laravel上传文件报错:413 Request Entity Too Large问题

    三个思路解决laravel上传文件报错:413 Request Entity Too Large问题

    上传图片的时候,是用laravel自带的上传图片的方法,一下气上传了20张,结果就无情报错:413 Request Entity Too Large,后面查一下,这个报错信息是nginx报的错误,不是php报的错误。也就是说在上传图片的时候被nginx拦截了
    2017-11-11

最新评论