2012-12-29 199 views
1

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

该脚本适用于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声明的摘录应为管理员设置$s_vers

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

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

再有是这样的:

else $wrong = true; 
} 

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

有什么在上面是错得离谱?

会话变量被保存在session数组看起来像这样的:

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

所以,当我进入管理细节发生什么事,我把它引导到adminpage.php,因为它应该再它将我注销。我想由于这个:

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(); 
} 

s_Vers在两个功能,这些功能在所需的文件被设置为全局,但直到adminpage加载不执行。

脚本中还有其他部分需要和变量声明,但与会话或登录序列无关。

任何人都知道我要出错的地方,还是可以提供解决方案?

回答

0

检查$_SESSION["s_Vers"]使用var_dump();,贝克。对于

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

变量应该是同一个类型,否则=运营商将不会发生。

你的情况应该是(int),bec。最后一项(即0)是(int)类型。

+0

嗨,谢谢你的回复。 'var_dump'不起作用,我不确定实现它的正确方法。这个脚本在PHP 5.2上工作,'$ _SESSION'换成'$ HTTP_SESSION_VARS'。我觉得还有一些额外的东西我需要做.. – Mikhail

+0

@Mikhail,你是什么意思下“var_dump不工作”?关于'$ HTTP_SESSION_VARS',它适用于PHP 4.0.6或更低版本,在更高版本中使用'$ _SESSION'。你已经纠正它。 –

+0

@Mikhail,看看'!$ aPswd && $ name === $ pswd',你确定你有变量'$ name'而不是'$ lname'? –