兰色精灵 发表于 2015-2-16 00:28:04

PHP网站制作之Apache办事器的用户认证

把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。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下开发。

飘灵儿 发表于 2015-2-16 03:49:03

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

兰色精灵 发表于 2015-3-4 15:57:13

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

深爱那片海 发表于 2015-3-6 15:18:50

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

精灵巫婆 发表于 2015-3-6 19:56:52

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

愤怒的大鸟 发表于 2015-3-11 16:38:16

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

小女巫 发表于 2015-3-17 18:08:19

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

变相怪杰 发表于 2015-3-21 06:09:01

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

若天明 发表于 2015-3-25 22:02:14

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

不帅 发表于 2015-4-8 16:37:14

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

小妖女 发表于 2015-4-13 02:25:57

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

第二个灵魂 发表于 2015-4-16 00:09:58

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

只想知道 发表于 2015-4-25 12:32:15

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

因胸联盟 发表于 2015-5-1 13:25:31

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

老尸 发表于 2015-5-6 12:12:01

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

蒙在股里 发表于 2015-5-9 05:18:18

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

简单生活 发表于 2015-5-9 10:53:31

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

山那边是海 发表于 2015-7-8 21:42:01

Ps:以上纯属原创,如有雷同,纯属巧合

莫相离 发表于 2015-7-10 21:42:52

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

活着的死人 发表于 2015-7-17 23:12:33

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
页: [1]
查看完整版本: PHP网站制作之Apache办事器的用户认证