|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。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可以会见)
require group managers (只要组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,
);
insert into users values("user1",password("1234"));
insert into users 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 "你必需输出准确的用户名和口令。n";
exit;
}
function CheckUser($uname, $pwd) {
if ($uname == "" || $pwd == "") return 0;
$query = "SELECT username,password FROM users WHERE username=$uname and password=password($pwd)";
$db_id = mysql_connect(localhost, oot, mypwd);
mysql_select_db(member,$db_id);
$result = mysql_query($query, $db_id);
$num=mysql_num_rows($result);
mysql_close($db_id);
if ($num>0) {
return 1; // 无效登录
} else {
return 0; // 有效登录
}
}
?>
函数Authenticate()的感化是使用函数Header(WWW-authenticate: basic realm="会员区"),向阅读器发送一个认证恳求动静,使阅读器弹出一个用户名/暗码的对话框。当用户输出用户名和暗码后,包括此PHP剧本的URL将主动地被再次挪用,将用户名、暗码、认证类型分离寄存到PHP4的三个特别变量:$PHP_AUTH_USER、$PHP_AUTH_PW、$PHP_AUTH_TYPE,在PHP法式中可依据这三个变量值来判别是不是正当用户。Header()函数中,basic暗示根基认证类型,realm的值暗示认证区域称号。
函数Header(HTTP/1.0 401 Unauthorized)使阅读器用户在一连屡次输出毛病的用户名或暗码时吸收到HTTP 401毛病。
函数CheckUser()用来判别阅读器用户发送来的用户名、暗码是不是与MySQL数据库的不异,若不异则前往1,不然前往0。个中mysql_connect(localhost, oot, mypwd)的数据库用户名root和暗码mypwd,应依据本人的MySQL设置而改动。
3.在需求限制会见的每一个PHP剧本法式开首增添以下法式段:
<?php
require(auth.inc);
if (CheckUser($PHP_AUTH_USER,$PHP_AUTH_PW)==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:apache、C:PHP4、C:mysql目次。
2)C:PHP4SAPI目次有几个经常使用Web办事器的PHP模块文件,将个中php4apache.dll拷贝到Apache的modules子目次(C:apachemodules)。
3)修正Apache的设置装备摆设文件C:apacheconfhttpd.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”,从头启动电脑。
怎么培养啊 别光说不练啊,好 ,比如新人入门自己步是配置环境,虽然现在都有很多的集成环境,但是真实的体验下配置环境还是会有很多帮助,不论是你以后工作还是在真实的linux下开发。 |
|