1

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 宣言を含む他の部分がありますが、セッションまたはログイン シーケンスとは関係ありません。

どこが間違っているのか、または解決策を提供できる人はいますか?

4

1 に答える 1

0

$_SESSION["s_Vers"]を使用して確認してくださいvar_dump();。為に

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

変数は同じ型である必要があります。そうでない場合、=演算子は実行されません。

あなたの場合、それは(int)であるべきです。最後の項目 ( 0 ) は(int)型です。

于 2012-12-29T08:04:04.193 に答える