我有一个 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
应$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"]) && !@$wrong )
{
include "setup.php";
if( $s_Vers == 0 )
header("Location: adminpage.php");
else
header("Location: userpage.php");
exit();
}
上面有什么明显错误的地方吗?
会话变量存储在会话数组中,如下所示:
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
在所需文件中的两个函数中被设置为全局,但在加载管理页面之前不会执行。
脚本的其他部分包含要求和变量声明,但与会话或登录顺序无关。
任何人都知道我要去哪里错了,或者可以提供解决方案吗?