Apache服务器的用户认证(1)(2)

来源:asp之家 时间:2010-05-24 18:35:00 

二. 采用数据库存储

目前,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”,重新启动电脑。

标签:apache,服务器
0
投稿

猜你喜欢

  • 侃侃网站产品与网站运营

    2009-11-16 12:26:00
  • 浅析如何有效推广影视站

    2009-10-28 16:11:00
  • 追忆似水年华—1998至2007的网络经历

    2007-08-18 10:31:00
  • 使用Apache Camel表达REST服务的方法

    2023-08-27 03:41:56
  • 四步使您的页面浏览量突破每天一千人次[译]

    2009-07-20 17:06:00
  • 只要坚持,我们就会有可能看到希望

    2007-12-25 12:37:00
  • Linux利用lsof/extundelete工具恢复误删除的文件或目录

    2023-08-05 01:34:39
  • GoDaddy Linux主机帐户的绝对路径

    2010-04-24 12:36:00
  • Win2K服务器端安全设置教程(2)

    2007-12-18 10:21:00
  • 情人节让中小网站受益 引发网络广告模式之争

    2008-02-14 21:41:00
  • SEO前景,SEM前景,网络营销前景

    2009-09-13 11:51:00
  • 巧用META标签对网站做搜索引擎优化

    2007-10-25 23:12:00
  • Linux下VMware workstation的3种使用技巧

    2023-08-20 15:18:20
  • Apache服务器的保护(1)

    2010-04-14 18:33:00
  • Z-Blog性能优化和评论IP显示

    2010-01-22 16:24:00
  • 构建反病毒反垃圾邮件系统(二)

    2007-09-26 14:23:00
  • 在Linux上实现DB2双机HA完整方案

    2008-10-10 12:50:00
  • 九城及高管在美遭股东起诉 被指披露虚假信息

    2009-10-22 08:43:00
  • 如果你做站的热情未减 渴望成功 请看这篇文章

    2007-10-12 12:18:00
  • UC HOME整合Discuz用户登陆代码

    2009-10-19 11:02:00
  • asp之家 网站运营 m.aspxhome.com