我有一个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加载不执行。
脚本中还有其他部分需要和变量声明,但与会话或登录序列无关。
任何人都知道我要出错的地方,还是可以提供解决方案?
嗨,谢谢你的回复。 'var_dump'不起作用,我不确定实现它的正确方法。这个脚本在PHP 5.2上工作,'$ _SESSION'换成'$ HTTP_SESSION_VARS'。我觉得还有一些额外的东西我需要做.. – Mikhail
@Mikhail,你是什么意思下“var_dump不工作”?关于'$ HTTP_SESSION_VARS',它适用于PHP 4.0.6或更低版本,在更高版本中使用'$ _SESSION'。你已经纠正它。 –
@Mikhail,看看'!$ aPswd && $ name === $ pswd',你确定你有变量'$ name'而不是'$ lname'? –