我的session_is_registered验证为什么总是通不过,请各位大侠给予指教

jiagu 2004-04-13 09:40:08
我在做网页的用户验证时,一开始就不打算使用cookie,因为很多文章都介绍cookie是不安全的,所以我选择了session会话,但是我在调试程序的过程中,在碰到session_is_registered验证变量是否注册了时,总是通不过,我很头疼,也许是我还没很好的理解session。下面是我的代码部分,请各位大侠给予指导。我很想我能实现我的session验证,所以请求你们的帮助,谢了!

【index.php】
<? session_start();

require "global.php";
require "function.php";

if ($_POST["sub_master"])
{
if (empty($_POST["master_user"]))
{
$error = "请输入用户名!";
backpage($error);
exit;
}
elseif (empty($_POST["master_pass"]))
{
$error = "请输入密码!";
backpage($error);
exit;
}
else
{
$user = $_POST["master_user"];
$pass = $_POST["master_pass"];
login($user,$pass);
}
}
?>
……(网页部分)
【global.php】
function login($user,$pass)
{
$ip = getenv("remote_addr");
session_register($ip);
$sql1 = "select * from sadmin where user='$user'";
$query1 = mysql_query($sql1) or die(mysql_error());
$arr1 = mysql_fetch_array($query1);

if (!$arr1[id])
{
$error = "对不起,该用户名不存在!";
backpage($error);
exit;
}
if ($arr1[pass]!=$pass)
{
$error = "对不起,密码不正确!";
backpage($error);
exit;
}

$username = $arr1[user];
$password = $arr1[pass];
$usertype = $arr1[type];
session_register($username);
session_register($password);
session_register($usertype);
echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=trends_insert.php'>";
}
【需要用到session验证的trends_insert.php】
<? session_start();
if (session_is_registered($username) and session_is_registered($password) and session_is_registered($ip))
{
require "../webadmin/config_inc.php";
require "function.php";

$sql3 = "select * from trends_type order by id";
$query3 = mysql_query($sql3) or die(mysql_error());
}
else
{
echo "对不起,您没有访问权限,网页将在5秒钟后返回……";
echo "<META HTTP-EQUIV=REFRESH CONTENT='5;URL=index.php'>";
}
?>
……(网页部分)
...全文
90 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiagu 2004-04-13
谢谢
回复
jiagu 2004-04-13
谢谢二位大侠了:)
回复
ccterran 2004-04-13
用它的预定义变量$_SESSION当然很方便的,比如注册session只要$_SESSION["变量名"]=变量值 就行了.在其它页面直接用$_SESSION["变量名"]就可以获得它的值
回复
lhzyn 2004-04-13
$_SESSION['userlogin']=array();
是把数据作为一个数组来存区,至于优缺点吗,自己想想拉
回复
jiagu 2004-04-13
我刚才不明白的就是没用session_register和session_is_registered是不是有何不好,或是以后操作起来不方便;而用了session_register("userlogin");
$_SESSION['userlogin']=array();会对以后的操作有什么便利呢?
回复
jiagu 2004-04-13
我的查询没问题,user字段是char型。谢谢
回复
jiagu 2004-04-13
我后来找了点资料看,改了改,也能验证了,但不知是否有不妥?请指教
代码如下:
【global.php】
<?
require "../webadmin/config_inc.php";

function login($user,$pass)
{
$ip = getenv("remote_addr");
$_SESSION["ip"] = $ip;
//session_register($ip);
$sql1 = "select * from sadmin where user='$user'";
$query1 = mysql_query($sql1) or die(mysql_error());
$arr1 = mysql_fetch_array($query1);

if (!$arr1[id])
{
$error = "对不起,该用户名不存在!";
backpage($error);
exit;
}
if ($arr1[pass]!=$pass)
{
$error = "对不起,密码不正确!";
backpage($error);
exit;
}

$_SESSION["username"] = $arr1[user];
$_SESSION["password"] = $arr1[pass];
$_SESSION["usertype"] = $arr1[type];
//session_register($username);
//session_register($password);
//session_register($usertype);
echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=trends_insert.php'>";
}
?>
【trends_insert.php】
<? session_start();
//if (session_is_registered($username) and session_is_registered($password) and session_is_registered($ip))
if (isset($_SESSION["ip"]) and isset($_SESSION["username"]) and isset($_SESSION["password"]))
{
require "../webadmin/config_inc.php";
require "function.php";

$sql3 = "select * from trends_type order by id";
$query3 = mysql_query($sql3) or die(mysql_error());
}
else
{
echo "对不起,您没有访问权限,网页将在5秒钟后返回……";
echo "<META HTTP-EQUIV=REFRESH CONTENT='5;URL=index.php'>";
exit;
}
?>
回复
ccterran 2004-04-13
session_register($username);
session_register($password);
session_register($usertype);
是错误的,应该是
session_register("username");
session_register("password");
session_register("usertype");

而且4.23以后推荐使用$_SESSION["username"]=$username;来注册session变量.获得变量username的值方法也是$_SESSION["username"]

你的session_is_registered用法也是错的,应该是session_is_registered("username")等等
回复
song213 2004-04-13
同意楼上所说,
不过只将$sql1 = "select * from sadmin where user='$user'";
改成$sql1 = "select * from sadmin where user=$user";
或者改成$sql1 = "select * from sadmin where user=".$user;
试试,我怀疑你的查询出了点问题。
回复
lhzyn 2004-04-13
session_is_registered($username) 你用的是$username,这是个变量名,其值位知,多半为空

你可以这样改改
function login($user,$pass)
中 $username = $arr1[user];
$password = $arr1[pass];
$usertype = $arr1[type];
session_register($username);
session_register($password);
session_register($usertype);
修改成
session_register("userlogin");
$_SESSION['userlogin']=array();
$_SESSION['userlogin']['username']=$arr1[user];
$_SESSION['userlogin']['userpass']=$arr1[pass];
$_SESSION['userlogin']['usertype']=$arr1[type];

【需要用到session验证的trends_insert.php】
之中的
if (session_is_registered($username) and session_is_registered($password) and session_is_registered($ip))
修改成
if (session_is_registered("userlogin"))

以后你可以通过
$_SESSION['userlogin']['username']
$_SESSION['userlogin']['userpass']
$_SESSION['userlogin']['usertype']
取得用户的登陆信息,进行进一步操作





回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告