php+apache用户认证问题

global_boy 2002-12-06 10:51:37
PHP以模块方式跑在apache下,想以MySQL数据库储存用户帐户信息;
用PHP调用apache作用户认证,在网上搜索了一篇文章(http://www.5xsoft.com/data/200107/2609201001.htm);
按照他说的作,总是不成功,不知问题出在哪里,请大家帮忙;


:)
...全文
40 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpteam 2002-12-11
  • 打赏
  • 举报
回复
if(!isset($PHP_AUTH_USER))
==>
if(empty($PHP_AUTH_USER))
试试看
bombshell 2002-12-08
  • 打赏
  • 举报
回复
<?
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)
);

shuixin13 2002-12-08
  • 打赏
  • 举报
回复
没有任何错误消息;??

有设置使Apache返回错误信息吗
可乐加水 2002-12-08
  • 打赏
  • 举报
回复
我觉得可能有两个原因:
1、数据库连接问题,可能你的数据库连接不成功,单独编写一个数据库连接的程序测试一下,看看能不能从数据库里面取出数据并显示出来
2、变量传递问题
global_boy 2002-12-08
  • 打赏
  • 举报
回复
没有任何错误消息;
能出现“验证框”;
但,无论如何也验证不通过;

:)

bombshell 2002-12-08
  • 打赏
  • 举报
回复
提示什么错误呀
global_boy 2002-12-07
  • 打赏
  • 举报
回复
现在是浏览器能谈“验证框”,但无论如何也验证不通过。
可乐加水 2002-12-07
  • 打赏
  • 举报
回复
<?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;
?>
这样才行
global_boy 2002-12-07
  • 打赏
  • 举报
回复
要验证的页内容:


<?php
require('auth.inc');
if (CheckUser($PHP_AUTH_USER,$PHP_AUTH_PW)==0) {
authenticate();
} else {
echo "这是合法用户要访问的网页。"; //将此行改为向合法用户输出的网页
}
?>
global_boy 2002-12-07
  • 打赏
  • 举报
回复
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; // 无效登录
}
}
?>
global_boy 2002-12-07
  • 打赏
  • 举报
回复
我建立的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)
tntxhy 2002-12-07
  • 打赏
  • 举报
回复
同意,安全起见还是用$_SERVER
adz 2002-12-07
  • 打赏
  • 举报
回复
还是不要改register_globals的好,以$_SERVER['PHP_AUTH_USER']及$_SERVER['PHP_AUTH_PW']来获取输入用户名及密码.
phpteam 2002-12-07
  • 打赏
  • 举报
回复
同意楼上的,先看看register_globals吧
可乐加水 2002-12-07
  • 打赏
  • 举报
回复
先看看php.ini文件里面register_global=on/off
这一项,改成register_global=on
然后重新启动apache
如果还不行检查CheckUser($uname, $pwd)这个函数写的对不对
shuixin13 2002-12-06
  • 打赏
  • 举报
回复
能见见你的代码吗,
是你的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')";

???
我想返回值应该有很多吧

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧