这是部分文件:在linux+apache+php下reg_logon.php里的echo不能能输出值,但在windowns+IIS+php下可以的,我怀疑在linux+apache+php下session有问题。index.php:<? include "config.inc"; if(isAdmin()) {
goodnames: 上面的简化程序运行正常,但原来的程序还是有问题 function logon($username, $password, $db) { global $USER,$RegUserName; $sql = "select * from user_info_t where username=".sqlStr($username)." and password=".sqlStr($password);
....
你能具体地说说 这个 老出错??到底是什么意思吗?
可能出错的原因多了,我可以说你的服务器硬件不行,系统有问题,web服务有问题。
程序写的不严格。配置有问题。可能出现的问题的地方实在是太多了。
不要总是等到别人问你,你再去描述症状;发贴尽量的描述清楚一些。你这样发贴,很少会有人给你回答的,你说得太笼统了。
include "config.inc";
if(isAdmin())
{
goPage("manager.php");
exit;
}
?>
<html>
<head>
<title>电大在线</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="css/css.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form method=post action="reg/reg_logon.php">
<table width="148" border="0" cellspacing="0" cellpadding="5">
<tr><td>用户名:
<input type="text" name="username" size="9"></td></tr>
<tr><td>密 码:
<input type="password" name="password" size="9"></td></tr>
<tr><td class="text" align="right"><input type="submit" name="Submit22" value="登 录"></td></tr>
<tr><td class="text" align="center"><a href="#" onclick="window.open(\'/reg/findpass.php\',\'忘记密码\',\'width=200,height=130\');" class=a03>忘记密码</a>
<a href=/reg/signup.php class=a03>新用户注册</a></td></tr></table>
</form>
</body>
</html>
reg_logon.php:<?
include("../include/system_parameter.inc");
include($ServerIncludePath."odbc.inc");
include($ServerIncludePath."reg.inc.php");
include($ServerIncludePath."public_user.inc");
if(CheckInput($username) and CheckInput($password)){
$db = new DB();
if(logon($username, $password, $db)==1)
{
if(isStudent())
{
$arr = GetCourseIDSelected(getUserID(),$db);
if(count($arr) > 0)
$url = "/student_study.php";
else
$url = "/student.php";
}
else
echo “$USER[username]”;
$url = "/";
}
else
$url = "/";
}
else{
$url = "/";
}
?>
<script language="javascript">
location.href="<?=$url?>";
</script>
public_user.inc:<?
session_start();
session_register ("USER");
session_register ("RegUserClass");
session_register ("RegUserName");
function logon($username, $password, $db)
{ global $USER,$RegUserName;
$sql = "select * from user_info_t where username=".sqlStr($username)." and password=".sqlStr($password);
$db->Query($sql);
if($rs=$db->NextRecord())
{ $USER[username] = $rs[username];
$USER[password] = $rs[password];
$USER[email] = $rs[email];
$USER[usertype] = $rs[usertype];
$USER[isvaild] = $rs[isvaild];
$USER[studentno] = $rs[studentno];
$RegUserName = $rs[username];
if(isAdmin() and !isRoot() )// Administrator
{
$sql = "select rightcode from User_Rights_T where userid = '$USER[username]' and righttype = '4' ";
$db->Query($sql);
while($rs1 = $db->NextRecord()){
$USER[admin][$rs1[rightcode]] = $rs1[rightcode];
}
}
return 1;
}
return 0;
}function isAdmin()
{
global $USER;
if($USER[usertype]==3 && ($USER[isvaild] == 1))
return 1;
else
return 0;
}?>
如果是在windows则
session.save_path = d:\tmp
reg_logon.php
里面可以取到吗?
echo
exit
输出一下
echo “$USER[username]”;
看看是否已经设定了
例如:
$myvar="abcdef";
session_register("myvar");
return 1
返回之前
$USER[username]
该变量在iis里面是已经被正确的赋值了,但是apache就没有值,是吗?
多余的代码都砍掉,例如:public_user.inc
<?
session_start();
session_register ("USER");
function logon()
{ global $USER
$USER[username] = "username";
$USER[password] = "password";
$USER[email] = "email";
$USER[usertype] = "usertype"
$USER[isvaild] = "isvaild";
$USER[studentno]= "studentno";
}
reg_logon.php:
<?
include("public_user.inc");
logon();
echo $USER[username];
?>
这样看看是否可以显示
另外:
我看到你给的源文件之中
reg_logon.php中的
echo “$USER[username]”;似乎这个双引号,是全角的??????
global $USER掉了分号了
但是,我的session可以写了。
奇怪的是:从form里提交给login.php, 老实打不开,地址栏里已经是login.php了呀。再刷新一下,就可以打开login.php.
直接访问login.php不跟参数,就很快打开了~奇怪了~
我把一个htm文件直接改扩展名为php,都不行~session你可以这样试:
在当前目录建目录:tmp
注意session_save_path,是“./tmp”,好像“tmp”不行
<?session_save_path("./tmp");
session_start();
if(session_register("passed") == true ) {$passed="ok";echo "注册成功!!";}
else echo "服务器session注册失败!!";?>
运行后,
然后看看tmp里面有东西没有,看看大小。
2、另外就是文件名是大小写区别的session搞的我快崩溃了~
*nix对文件名及其路径都很严格的区分不过,/tmp
开头的,是表示跟目录开头的那个tmp目录,应该是可以的。
[Session]
session.save_path = /tmp
改成
session.save_path =c:\temp在c盘下建个文件名叫temp
就可以了!!
function logon($username, $password, $db)
{ global $USER,$RegUserName;
$sql = "select * from user_info_t where username=".sqlStr($username)." and password=".sqlStr($password);
$db->Query($sql);
if($rs=$db->NextRecord())
{ $USER[username] = $rs[username];
$USER[password] = $rs[password];
$USER[email] = $rs[email];
$USER[usertype] = $rs[usertype];
$USER[isvaild] = $rs[isvaild];
$USER[studentno] = $rs[studentno];
$RegUserName = $rs[username]; echo $rs[username];
echo $USER[username];
}
}echo $rs[username]; 有值输出
echo $USER[username];输出的是空值
在我的客户端和服务器之间竟然有基于http的过滤!!!
我用的可是电信的虚拟主机服务器啊~黑暗啊~
过滤的关键词是:passwd
我提交的变量里: 密码项 name=passwd
所以就不行了~改成:name="mypass" 就一切OK!
<form action="./login.php" method=POST>
用户名: <input type=text size=15 maxlength=50 name="name">
密码: <input type=password size=15 maxlength=50 name="mypass">
<input type=submit value="登 录" name=send>
<input type=reset value="重 填">
</form>看来是对提交的信息过滤了!!够狠的啊~
甚至我这样试:login.htm?passwd=qqq 连login.htm都打不开了~,呵呵~~~~~~~
看来大家以后要小心了~另:也许服务器被装了后门,监视着?嘿嘿~~~~~~~不知道了~
可是有的人的机器就可以提交 ?passwd=qqq这样的东西。是不是说明我的网段被监视?
在我的客户端和服务器之间竟然有基于http的过滤!!!
我用的可是电信的虚拟主机服务器啊~黑暗啊~
过滤的关键词是:passwd
我提交的变量里: 密码项 name=passwd
所以就不行了~改成:name="mypass" 就一切OK!
<form action="./login.php" method=POST>
用户名: <input type=text size=15 maxlength=50 name="name">
密码: <input type=password size=15 maxlength=50 name="mypass">
<input type=submit value="登 录" name=send>
<input type=reset value="重 填">
</form>看来是对提交的信息过滤了!!够狠的啊~
甚至我这样试:login.htm?passwd=qqq 连login.htm都打不开了~,呵呵~~~~~~~
看来大家以后要小心了~另:也许服务器被装了后门,监视着?嘿嘿~~~~~~~不知道了~
可是有的人的机器就可以提交 ?passwd=qqq这样的东西。是不是说明我的网段被监视?
的后面是个全角的分号吗?
问题解决了,session_register ("USER");换成session_register ("XXXXXXXX");就可以了,用USER就是有问题,真是想不通。