PHP网页编程之Apache办事器的用户认证 (转)
你的留言本应该加入注册以及分页功能了,而如果你更强的话,UI(用户界面)也可以加强,完成之后,感觉是不是特有成就感?不管怎么样,咱好歹是写了一个动态网站程序了,放在自己的网站上耍耍吧。apache|办事器 常常上彀的读者会碰到这类情形:会见一些网站的某些资本时,阅读器弹出一个对话框,请求输出用户名和暗码来获得对资本的会见。这就是用户认证的一种手艺。用户认证是回护收集体系资本的第一道防地,它掌握着一切登录并反省会见用户的正当性,其方针是仅让正当用户以正当的权限会见收集体系的资本。根基的用户认证手艺是“用户名+暗码”。Apache是今朝盛行的Web办事器,可运转在Linux、Unix、Windows等操作体系下,它可以很好地处理“用户名+暗码”的认证成绩。Apache用户认证所需求的用户名和暗码有两种分歧的存贮体例:一种是文本文件;另外一种是MSQL、Oracle、MySQL等数据库。上面以Linux的Apache为例,就这两种存贮体例,分离引见若何完成用户认证功效,同时对Windows的Apache用户认证作扼要的申明。
采取文本文件存储
这类认证体例的根基思惟是:Apache启动认证功效后,就能够在需求限制会见的目次下创立一个名为.htaccess的文件,指定认证的设置装备摆设号令。当用户第一次会见该目次的文件时,阅读器会显示一个对话框,请求输出用户名和暗码,停止用户身份切实其实认。若是正当用户,则显示所会见的页面内容,尔后会见该目次的每一个页面,阅读器主动送出用户名和暗码,不必再输出了,直到封闭阅读器为止。以下是完成的详细步调:
以超等用户root进入Linux,假定Apache 1.3.12已编译、装置到了/usr/local/apache目次中。缺省情形下,编译Apache时主动到场mod_auth模块,使用此模块可以完成“用户名+暗码”以文本文件为存储体例的认证功效。
1.修正Apache的设置装备摆设文件/usr/local/apache/conf/httpd.conf,对认证资本地点的目次设定设置装备摆设号令。下例是对/usr/local/apache/htdocs/members目次的设置装备摆设:
<Directory /usr/local/apache/htdocs /members>
Options Indexes FollowSymLinks
allowoverride authconfig
order allow,deny
allow from all
</Directory>
个中,allowoverride authconfig一行暗示答应对/usr/local/apache/htdocs/ members目次下的文件停止用户认证。
2.在限制会见的目次/usr/local/apache/htdocs/members下创立一个文件.htaccess,其内容以下:
AuthName "会员区"
AuthType basic
AuthUserFile/usr/local/apache/members.txt
require valid-user
申明:文件.htaccess中经常使用的设置装备摆设号令有以下几个:
1) AuthName号令:指定认证区域称号。区域称号是在提醒请求认证的对话框中显示给用户的(见附图)。
2)AuthType号令:指定认证类型。在HTTP1.0中,只要一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5。
3) AuthUserFile号令:指定一个包括用户名和暗码的文本文件,每行一对。
4) AuthGroupFile号令:指定包括用户组清单和这些组的成员清单的文本文件。组的成员之间用空格分隔,如:
managers:user1 user2
5) require号令:指定哪些用户或组才干被受权会见。如:
require user user1 user2(只要用户user1和user2可以会见)
requiresgroupsmanagers (只要组managers中成员可以会见)
require valid-user (在AuthUserFile指定的文件中任何用户都可以会见)
3.使用Apache附带的法式htpasswd,生成包括用户名和暗码的文本文件:/usr/local/apache/members.txt,每行内容格局为“用户名:暗码”。
#cd /usr/local/apache/bin
#htpasswd -bc ../members.txt user1 1234
#htpasswd -b ../members.txt user2 5678
文本文件members.txt含有两个用户:user1,口令为1234;user2,口令为5678。注重,不要将此文本文件寄存在Web文档的目次树中,以避免被用户下载。
欲懂得htpasswd法式的匡助,请履行htpasswd -h。
当用户数目对照少时,这类办法对用户的认证是便利、省事的,保护任务也复杂。然而在用户数目无数万人,乃至数十万人时,会在查找用户上花失落必定工夫,从而下降办事器的效力。这类情况,应采取数据库体例。
采取数据库存储
今朝,Apache、PHP4、MySQL三者是Linux下构建Web网站的最好伙伴,这三个软件都是收费软件。将三者联合起来,经由过程HTTP协定,使用PHP4和MySQL,完成Apache的用户认证功效。
只要在PHP4以Apache的模块体例来运转的时分才干停止用户认证。为此,在编译Apache时需求到场PHP4模块一同编译。假定PHP4作为Apache的模块,编译、装置Apache到/usr/local/apache目次,编译、装置MySQL到/usr/local/mysql目次。然落后行上面的步调:
1.在MySQL中创立一个数据库member,在个中创立一个表users,用来寄存正当用户的用户名和暗码。
1)用vi号令在/tmp目次创立一个SQL剧本文件auth.sql,内容为:
drop database if exists member;
create database member;
use member;
create table users (
username char(20) not null,
password char(20) not null,
);
insertsintosusers values("user1",password("1234"));
insertsintosusers values("user2",password("5678"));
2)启动MySQL客户法式mysql,履行上述SQL剧本文件auth.sql的号令,在表users中增添两个用户的纪录。
#mysql -u root -pmypwd</tmp/auth.sql
2.编写一个PHP剧本头文件auth.inc,法式内容为:
<?php
function authenticate() {
Header('WWW-authenticate: basic realm="会员区"');
Header('HTTP/1.0 401 Unauthorized');
echo "你必需输出准确的用户名和口令。 ";
exit;
}
function CheckUser(, ) {
if ( == "" || == "") return 0;
= "SELECT username,password FROM usersswheresusername='' and password=password('')";
= mysql_connect('localhost', 'root', 'mypwd');
mysql_select_db('member',);
= mysql_query(, );
=mysql_num_rows();
mysql_close();
if (>0) {
return 1; //无效登录
} else {
return 0; //有效登录
}
}
?>
函数Authenticate()的感化是使用函数Header('WWW-authenticate: basic realm="会员区"'),向阅读器发送一个认证恳求动静,使阅读器弹出一个用户名/暗码的对话框。当用户输出用户名和暗码后,包括此PHP剧本的URL将主动地被再次挪用,将用户名、暗码、认证类型分离寄存到PHP4的三个特别变量:、、,在PHP法式中可依据这三个变量值来判别是不是正当用户。Header()函数中,basic暗示根基认证类型,realm的值暗示认证区域称号。
函数Header('HTTP/1.0 401 Unauthorized')使阅读器用户在一连屡次输出毛病的用户名或暗码时吸收到HTTP 401毛病。
函数CheckUser()用来判别阅读器用户发送来的用户名、暗码是不是与MySQL数据库的不异,若不异则前往1,不然前往0。个中mysql_connect('localhost', 'root', 'mypwd')的数据库用户名root和暗码mypwd,应依据本人的MySQL设置而改动。
3.在需求限制会见的每一个PHP剧本法式开首增添以下法式段:
<?php
require('auth.inc');
if (CheckUser(,)==0) {
authenticate();
} else {
echo "这是正当用户要会见的网页。"; //将此行改成向正当用户输入的网页
}
?>
把需求向正当用户显示的网页内容放到else子句中,代替上述法式段的一行:
echo "这是正当用户要会见的网页。";
如许,当用户会见该PHP剧本法式时,需求输出用户名和暗码来确认用户的身份。
Windows的Apache用户认证
1.采取文本文件寄存用户名和暗码时,其办法同前,但需求注重的是暗示途径的目次名之间、目次名与文件名之间一概用斜线“/”分隔,而不是反斜线“”。
2.采取MySQL数据库寄存用户名和暗码时,起首按以下办法将PHP 4.0.3作为Apache的模块来运转,然后按上述“采取数据库存储用户名和暗码的用户认证”的办法完成。
1)下载Windows版的Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32,将三个软件分离解压、装置到C:pache、C:PHP4、C:mysql目次。
2) C:PHP4SAPI目次有几个经常使用Web办事器的PHP模块文件,将个中php4apache.dll拷贝到Apache的modules子目次(C:pachemodules)。
3)修正Apache的设置装备摆设文件C:pachenfhttpd.conf,增添以下几行:
LoadModule php4_module modules/ php4apache.dll
AddType application/x-httpd-php .php3
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php
第一行使PHP4以Apache的模块体例运转,如许才干停止用户认证,后三行界说PHP剧本法式的扩大名。
4)在autoexec.bat文件的PATH号令中增添PHP4地点途径“C:PHP4”,从头启动电脑。
经我测试,2.0版本的apache不成
到现在,对排版还是不很熟练,经常会排不好。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 Ps:以上纯属原创,如有雷同,纯属巧合 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 Ps:以上纯属原创,如有雷同,纯属巧合 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 做为1门年轻的语言,php一直很努力。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 爱上php,他也会爱上你。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页:
[1]
2