php+apache用户认证问题
PHP以模块方式跑在apache下,想以MySQL数据库储存用户帐户信息;
用PHP调用apache作用户认证,在网上搜索了一篇文章(http://www.5xsoft.com/data/200107/2609201001.htm);
按照他说的作,总是不成功,不知问题出在哪里,请大家帮忙;
:)
问题点数:120、回复次数:16Top
1 楼shuixin13(犬犬(心帆))回复于 2002-12-06 23:16:52 得分 20
能见见你的代码吗,
是你的PHP不能登录服务器还是其它的什么原因?
出错提示呢
那篇文章已拜读
有这样一个想法
用于验证的SQL
$query = "SELECT username,password FROM users WHERE username='$uname' and password=password('$pwd')";
如果我这样写入用户名与密码呢
$uname = 123' Or 'a'='a
$pwd = 123
$query = "SELECT username,password FROM users WHERE username='123' Or 'a'='a' and password=password('123')";
???
我想返回值应该有很多吧
Top
2 楼realyfly(^_^)回复于 2002-12-07 12:06:40 得分 10
<?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', 'root', '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; // 无效登录
}
}
while($PHP_AUTH_USER==""||$PHP_AUTH_PW=="")
{
authenticate();
while(!CheckUser($PHP_AUTH_USER,$PHP_AUTH_PW))
authenticate();
}
echo "username".$PHP_AUTH_USER." password".$PHP_AUTH_PW;
?>
这样才行Top
3 楼global_boy(闲人)回复于 2002-12-07 12:59:14 得分 0
现在是浏览器能谈“验证框”,但无论如何也验证不通过。Top
4 楼realyfly(^_^)回复于 2002-12-07 13:13:18 得分 10
先看看php.ini文件里面register_global=on/off
这一项,改成register_global=on
然后重新启动apache
如果还不行检查CheckUser($uname, $pwd)这个函数写的对不对Top
5 楼phpteam(phpsalon.com)回复于 2002-12-07 13:52:59 得分 10
同意楼上的,先看看register_globals吧Top
6 楼adz(日全食)回复于 2002-12-07 15:36:54 得分 5
还是不要改register_globals的好,以$_SERVER['PHP_AUTH_USER']及$_SERVER['PHP_AUTH_PW']来获取输入用户名及密码.Top
7 楼tntxhy(落日使者)回复于 2002-12-07 17:02:24 得分 5
同意,安全起见还是用$_SERVERTop
8 楼global_boy(闲人)回复于 2002-12-07 19:26:32 得分 0
我建立的MySQL数据库结构:
mysql> describe users;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(20) | YES | | 1234 | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.07 sec)Top
9 楼global_boy(闲人)回复于 2002-12-07 19:27:16 得分 0
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', 'root');
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; // 无效登录
}
}
?>Top
10 楼global_boy(闲人)回复于 2002-12-07 19:29:57 得分 0
要验证的页内容:
<?php
require('auth.inc');
if (CheckUser($PHP_AUTH_USER,$PHP_AUTH_PW)==0) {
authenticate();
} else {
echo "这是合法用户要访问的网页。"; //将此行改为向合法用户输出的网页
}
?>Top
11 楼bombshell(水中鱼)回复于 2002-12-08 10:11:23 得分 10
<?
if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm=\"穿越时光\"");
header("HTTP/1.0 401 Unauthorized");
echo "身份验证失败,您无权登录本站!";
exit;
}
if(!mysql_pconnect("myhost","webuser","password"))
{
echo "无法连接数据库";
exit;
}
$sql = "select name,password,class from access where name='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'";
$result = mysql_db_query("myweb",$sql);
$row = mysql_fetch_array($result);
if(!$row)
{
header(("WWW-Authenticate:Basic realm=\"穿越时光\"");
header("HTTP/1.0 401 Unauthorized");
echo "身份验证失败,您无权登录本站!";
exit;
}
数据库为myweb
数据表是:access
create table access(
id int(9) not null auto_increment,
name varchar(20) not null,
password varchar(10) not null,
class char(2) default'0' not null,
primary key(id)
);
Top
12 楼bombshell(水中鱼)回复于 2002-12-08 13:55:03 得分 5
提示什么错误呀Top
13 楼global_boy(闲人)回复于 2002-12-08 15:44:29 得分 0
没有任何错误消息;
能出现“验证框”;
但,无论如何也验证不通过;
:)
Top
14 楼realyfly(^_^)回复于 2002-12-08 16:23:23 得分 10
我觉得可能有两个原因:
1、数据库连接问题,可能你的数据库连接不成功,单独编写一个数据库连接的程序测试一下,看看能不能从数据库里面取出数据并显示出来
2、变量传递问题Top
15 楼shuixin13(犬犬(心帆))回复于 2002-12-08 18:35:50 得分 25
没有任何错误消息;??
有设置使Apache返回错误信息吗Top
16 楼phpteam(phpsalon.com)回复于 2002-12-11 19:56:50 得分 10
if(!isset($PHP_AUTH_USER))
==>
if(empty($PHP_AUTH_USER))
试试看Top




