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 相关文章推荐
在php中取得image按钮传递的name值
Oct 09 PHP
PHP与C#分别格式化文件大小的代码
May 14 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php异步多线程swoole用法实例
Nov 14 PHP
php htmlentities()函数的定义和用法
May 13 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
php7性能提升的原因详解
Oct 13 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 escape URL编码
2008/12/10 PHP
php google或baidu分页代码
2009/11/26 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
Javascript之文件操作
2007/03/07 Javascript
top.location.href 没有权限 解决方法
2008/08/05 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
python Scrapy框架原理解析
2021/01/04 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
劳动之星获奖感言
2014/02/01 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
岗位明星事迹材料
2014/05/18 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
干部外出学习心得体会
2016/01/18 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
Mysql排序的特性详情
2021/11/01 MySQL
HTML+JS实现在线朗读器
2022/02/15 Javascript
基于Redission的分布式锁实战
2022/08/14 Redis