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


猜你喜欢
- 我的上一篇文章《Linux编程之PING的实现》里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人
- 以前一直在寻找一个方法备份和从别的Wordpress中导入友情链接(blogroll)。但是一直没有人告诉一个办法,只是说从数据库中导入。但
- Linux中增加软路由的方法一:route add -net 172.16.6.0 netmask 255.255.255.0 gw 172
- Apache 默认存放网页根目录,是在/var/www/html/下面,也就是说,默认情况下,一个服务器,只能跑一个网站。但是一台性能还算不
- 通过对“大龄文艺女青年之歌”的成功炒作,使邵美女迅速走红。精准的多点切入为这次炒作奠定了良好的基础,准确把握受众心里更是这次营销成功的核心。
- 网站的定位往往就是一句话的事情,但就是简单的一句话却来之不易。为了这简单的一句话,很多网站花了很长的时间,走了不少的曲折之路。网站的定位跟网
- 在 beta3 的时候,我用 hd.img 制作了一张引导软盘,并且用 iso 文件来安装。这次,我准备变换一种方式,不用再制作软盘了。 上
- Zabbix2019/10/12 Chenxin参考https://www.zabbix.com/documentation/4.0/zh/
- Linux下/etc/network/interfaces文件用来配置网络接口。初始化网口Ethernet Interface大部分的网络接
- 邮件服务器是一个网站所必需的服务。在这里,我们可以通过MDaemon软件来完成邮件服务器的架设。1.安装MDaemon首先,到http://
- 今天登陆Google Adsense后台,发现多了一个东西:AdSense for Mobile ,应该是英文版推出在先,今天也出
- 在过去的几个月里,总是接二连三的有文章针对网站改版发表评论,诸如说:“好 ”,“
- 如何从博客中扩展我们的外部链接。但需要申明一点的是:思亿欧所说的不是通过大量注册博客增加自己链接的方式。而是,参与到跟自己主题相关的博客中分
- 问题一:百度如何看待伪原创?答:“伪原创”就是“非原创”。对非原创的策略,同样适用于伪原创。归根结底,这是一个技术实现程度问题,而不是策略思
- 配置1.Kerberos提供了一个集中式的认证服务器结构,认证服务器的功能式实现用户与其访问的服务器间的相互鉴别。(采用的是对称密钥加密技术
- 虽然我们把这个话题写在 SEO入门的类别下,但据我们在网上所查资料发现,很多人对link 和domain 的区别存在误解,也就是说这个问题并
- 1.在百度提交网址但现在百度自动收录的速度已经让众人所知,所以提出以下的方法。紧供所有的seo爱好者参详,学习。2.创建百度空间一般来说,创
- 购买HostMonster美国主机非常简单,购买的过程也很简单。HostMonster主机可以用信用卡支付,也可以用PayPal支付。下面以
- 盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的
- 打开:hack/bank/index.php查找:$pages = numofpage($rt['sum'