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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
收集的php编写大型网站问题集
Mar 06 PHP
用php实现的下载css文件中的图片的代码
Feb 08 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
php实现短信发送代码
Jul 05 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
php读取本地json文件的实例
Mar 07 PHP
实例讲解通过​PHP创建数据库
Jan 20 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 google或baidu分页代码
2009/11/26 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
实例讲解React 组件
2020/07/07 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Django 重写用户模型的实现
2019/07/29 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python 19个值得学习的编程技巧
2020/08/15 Python
详解python对象之间的交互
2020/09/29 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
列车长先进事迹材料
2014/01/25 职场文书
初中班主任评语大全
2014/04/24 职场文书
学校运动会霸气口号
2014/06/07 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
小学班主任工作随笔
2015/08/15 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
Python Django ORM连表正反操作技巧
2021/06/13 Python