PHP脚本的10个技巧(5)


Posted in PHP onOctober 09, 2006

采用PHP的用户认证
如果你希望在每一个脚本的基础上实现口令保护功能,那么你可以联合使用header()函数和$PHP_AUTH_USER、$PHP_AUTH_PW全局变量来创造一个基本的认证方案。通常的、基于服务器的认证请求/响应回合很象下面这个样子:

1.用户向一台Web服务器请求一个文件。如果文件在一个受到保护的区域以内,服务器就在响应的文件头内加上401(非法用户)字符串作为回应。

2.浏览器看见该响应之后就弹出用户名/口令对话框。

3.用户在对话框中输入用户名和口令,然后单击“确认”按钮把这些信息送回到服务器。

4.如果用户名和口令有效,被保护的文件将对用户显示,并且,只要现在经过证实的用户一直在保护区域以内。以上的认证过程都有效。

 

一个简单的PHP脚本可以模仿HTTP认证请求/响应系统,方法就是发送适当的HTTP头来使得用户名/口令对话框自动出现在客户机的屏幕上。PHP把用户输入对话框的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW变量中。使用这些变量,你就可以把不符合用户名/口令检验的列表存放到某个文本文件、数据库或者你任何自己指定的地方

注意:$PHP_AUTH_USER、$PHP_AUTH_PW和$PHP_AUTH_TYPE这三个全局变量只有在PHP被当作一个模块安装时才是有效的。如果你正在使用PHP的CGI版本,那么你只能受限于采用基于.htaccess的认证或基于数据库的认证方式,这样你就必需设计HTML表单让用户输入用户名和口令,再让PHP进行有效性的检查。

下面的这个例子显示对2个设定值的检查,但在理论上和以上的用户名和口令检查并无本质的不同。

<?
/* Check for values in $PHP_AUTH_USER and $PHP_AUTH_PW */

if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {

  /* No values: send headers causing dialog box to appear */
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;

} else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){

  /* Values contain some values, so check to see if they're correct */

  if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
    /* If either the username entered is incorrect, or the password entered is incorrect, send the headers causing dialog box to appear */
    header('WWW-Authenticate: Basic realm="My Private Stuff"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authorization Required.';
    exit;
  } else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
    /* if both values are correct, print success message */
    echo "<P>You're authorized!</p>";
  }
}
?>

记住,当你正在使用基于文件的保护措施时,这种方式不是绝对能保护目录的安全毯。这对你们中的大多数人而言是显而易见的,但是,如果你的大脑在弹出对话框之间和保护给定目录之间建立一个连接,那么你必须费点劲来认识这一进程。

PHP 相关文章推荐
PHPMailer安装方法及简单实例
Nov 25 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
详解Laravel制作API接口
May 31 PHP
打造计数器DIY三步曲(中)
Oct 09 #PHP
打造计数器DIY三步曲(下)
Oct 09 #PHP
打造计数器DIY三步曲(上)
Oct 09 #PHP
PHP脚本的10个技巧(4)
Oct 09 #PHP
聊天室php&amp;mysql(六)
Oct 09 #PHP
PHP脚本的10个技巧(3)
Oct 09 #PHP
社区(php&amp;&amp;mysql)六
Oct 09 #PHP
You might like
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
django下创建多个app并设置urls方法
2020/08/02 Python
python 基于opencv操作摄像头
2020/12/24 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
安全员岗位职责
2013/11/11 职场文书
民事授权委托书范文
2014/08/02 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
2015年电教工作总结
2015/05/26 职场文书