PHP Session&登录

时间:2012-12-29 07:08:47

标签: php arrays session variables

我有一个cms的登录和会话创建脚本。它检查管理文件以获取正确的详细信息,否则会对用户详细信息执行SQL查询。会话变量的设置取决于哪个成功,然后加载相应的页面。

该脚本适用于PHP 5.2,但我一直在尝试重写代码以修复PHP 5.4,register_globals$http_session_vars的弃用函数。我认为我得到的问题是变量($s_Vers)未正确设置,因为它正在使用数组。

绕过register_globals

$aPwd = $_REQUEST['aPwd'];
$aLogin = $_REQUEST['aLogin'];
$lname = $_REQUEST['lname'];
$pswd = $_REQUEST['pswd'];

这似乎工作正常。

对于$HTTP_SESSION_VARS我已用$_SESSION替换了所有实例。我会假设它并不那么简单。应为管理员设置if的{​​{1}}语句摘录。

$s_vers

在此之后,有一个else语句来运行用户登录详细信息的SQL查询。

然后有这个:

if ( $lname === $aLogin
  && (( $aPwd && md5($pswd) === $aPswd )
  || (!$aPswd && $name === $pswd )) )
{ 
$s_Vers  = $_SESSION["s_Vers"] = 0;
$s_aid   = $_SESSION["s_uid"] = 0;
}

上面有什么明显的错误吗?

会话变量存储在会话数组中,如下所示:

else $wrong = true;
}

if( isset($_SESSION["s_Vers"]) && !@$wrong )
{
  include "setup.php";
    if( $s_Vers == 0 )
        header("Location: adminpage.php");
    else
        header("Location: userpage.php");
    exit();
}

因此,当我输入管理员详细信息时会发生什么,我直接看到adminpage.php,因为它应该将其记录下来。我猜是因为这个:

session_start();
$session_array = array("username", "password", "s_uid", "s_Vers");

if ( (!IsSet($curmode) && !$username) || isset($logout) || $s_Vers != $_SESSION["s_Vers"] || $s_uid != $_SESSION_["s_uid"] ) { $username = ""; $password = ""; $curmode = 0; session_destroy(); // echo "Here"; // exit(); // Header("Location: http://".$g_AfterLogoutURL); ?> <HTML> <HEAD> <TITLE>Not Authorised</TITLE> <meta http-equiv="refresh" content="1;url=login.php"> </HEAD> <SCRIPT language="javascript"> parent.location="login.php"; </SCRIPT> <BODY> </BODY> </HTML> <? exit(); } 被设置为必需文件中的两个函数的全局,但在加载管理页面之前不会执行。

脚本的其他部分包含需求和变量声明,但与会话或登录顺序无关。

任何人都知道我哪里出错,或者能提供解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用$_SESSION["s_Vers"]检查var_dump();,即可。对

$s_Vers  = $_SESSION["s_Vers"] = 0;

变量应为一个且类型相同,否则=运算符将不会发生。

在你的情况下它应该是(int),bec。最后一项(为0 )属于(int)类型。