仓酷云
标题:
PHP网站制作之Apache办事器的用户认证
[打印本页]
作者:
兰色精灵
时间:
2015-2-16 00:28
标题:
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
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者:
兰色精灵
时间:
2015-3-4 15:57
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者:
深爱那片海
时间:
2015-3-6 15:18
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者:
精灵巫婆
时间:
2015-3-6 19:56
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者:
愤怒的大鸟
时间:
2015-3-11 16:38
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者:
小女巫
时间:
2015-3-17 18:08
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者:
变相怪杰
时间:
2015-3-21 06:09
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者:
若天明
时间:
2015-3-25 22:02
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者:
不帅
时间:
2015-4-8 16:37
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者:
小妖女
时间:
2015-4-13 02:25
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者:
第二个灵魂
时间:
2015-4-16 00:09
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者:
只想知道
时间:
2015-4-25 12:32
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者:
因胸联盟
时间:
2015-5-1 13:25
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者:
老尸
时间:
2015-5-6 12:12
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者:
蒙在股里
时间:
2015-5-9 05:18
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者:
简单生活
时间:
2015-5-9 10:53
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者:
山那边是海
时间:
2015-7-8 21:42
Ps:以上纯属原创,如有雷同,纯属巧合
作者:
莫相离
时间:
2015-7-10 21:42
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者:
活着的死人
时间:
2015-7-17 23:12
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2