当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP脚本的8个技巧(5)

PHP
用PHP实现Ftp用户的在线管理
用PHP实现分段下载
最令PHP初学者头痛的十四个问题
用PHP写的MD5加密函数
PHP应用程序加速探索之简介
将SSH与PHP相连接 确保传输数据的安全
PHP制作的仿百度的站内搜索引擎代码
PHP读取汉字点阵数据
PHP实现任意字符集下正常显示网页的方法
利用PHP的OOP特性实现数据保护
关于PHP字符集的问题
新手入门:IIS6环境下的PHP最佳配置方法
新手入门:初学动态网页PHP的18个例子
基于PHP的AJAX技术实现文件异步上传
PHP技巧--通过COM使用ADODB
PHP技巧:正确理解PHP程序编译时的错误信息
PHP技巧:分析利用PHP制作新闻系统的步骤
PHP技巧:通过实例深入剖析require和include的用法
PHP技巧:优化动态网页技术PHP程序的12条技巧
PHP技巧:使用APC缓存优化PHP程序

PHP脚本的8个技巧(5)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 45 ::
收藏到网摘: n/a

采用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个设定值的检查,但在理论上和以上的用户名和口令检查并无本质的不同。

<?
/*Checkforvaluesin$PHP_AUTH_USERand$PHP_AUTH_PW*/

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

/*Novalues:sendheaderscausingdialogboxtoappear*/
header('WWW-Authenticate:Basicrealm="MyPrivateStuff"');
header('HTTP/1.0401Unauthorized');
echo'AuthorizationRequired.';
exit;

}elseif((isset($PHP_AUTH_USER))&&(isset($PHP_AUTH_PW))){

/*Valuescontainsomevalues,sochecktoseeifthey'recorrect*/

if(($PHP_AUTH_USER!="validname")||($PHP_AUTH_PW!="goodpassword")){
/*Ifeithertheusernameenteredisincorrect,orthepasswordenteredisincorrect,sendtheheaderscausingdialogboxtoappear*/
header('WWW-Authenticate:Basicrealm="MyPrivateStuff"');
header('HTTP/1.0401Unauthorized');
echo'AuthorizationRequired.';
exit;
}elseif(($PHP_AUTH_USER=="validname")||($PHP_AUTH_PW=="goodpassword")){
/*ifbothvaluesarecorrect,printsuccessmessage*/
echo"<P>You'reauthorized!</p>";
}
}
?>

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