cms のログインおよびセッション作成スクリプトがあります。管理ファイルの正しい詳細をチェックします。それ以外の場合は、ユーザーの詳細について SQL クエリを実行します。どちらが成功したかに応じてセッション変数が設定され、それに応じてページがロードされます。
register_globals
スクリプトは PHP 5.2 で動作しますが、特にPHP 5.4 の非推奨関数を修正するためにコードを書き直そうとしています$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;
}
この後に、ユーザー ログインの詳細について SQL クエリを実行するための else ステートメントがあります。
次に、これがあります:
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
必要なファイルにある 2 つの関数でグローバルとして設定されていますが、adminpage が読み込まれるまで実行されません。
スクリプトには、required および variable 宣言を含む他の部分がありますが、セッションまたはログイン シーケンスとは関係ありません。
どこが間違っているのか、または解決策を提供できる人はいますか?