0

次のコードを含むログインフォームがあります

if ($does_user == 1)//Als het aantal rijen gelijk is aan 1, zorg wel met registreren dat er geen dubbele gebruikers in de database kunnen worden toegevoegd
        {
            //Extract de array naar strings
            extract($row);

            if ($acces_level == 1)
            {   
                if (isset($_POST["remember"]))
                {
                    //Cookie aanmaken met de id van de gene die inlogt
                    setcookie("user_id", $user_id, time()+60*60*24*100, "/");

                    //Naar de profiel pagina
                    header("location: profile.php?user_id=".$user_id."");
                }
                else
                {
                    //Session aanmaken met de id van de gene die inlogt
                    $_SESSION["user_id"] = $user_id;

                    //Naar de profiel pagina
                    header("location: profile.php?user_id=".$user_id."");
                }
            }
            elseif ($acces_level == 2)
            {
                if (isset($_POST["remember"]))
                {
                    //Cookie aanmaken met de id van de gene die inlogt
                    setcookie("user_id", $user_id, time()+60*60*24*100, "/");

                    //Naar de admin pagina
                    header("location: admin/index.php?user_id=".$user_id."");
                }
                else
                {
                    //Session aanmaken met de id van de gene die inlogt
                    $_SESSION["user_id"] = $user_id;

                    //Naar de admin pagina
                    header("location: admin/index.php?user_id=".$user_id."");
                }
            }
        }

profile.php ページに移動すると、URL とともに ID が送信されます。だから私は、ユーザーがURLのIDを404.phpに変更したときに関数を構築しますが、この関数はうまく機能せず、理由がわかりません。

function user_exists()
{
    if (isset($_SESSION["user_id"]) !== $_GET["user_id"])
    {
        header("location: 404.php");
        exit();
    }
    elseif (isset($_COOKIE["user_id"]) !== $_GET["user_id"])
    {
        header("location: 404.php");
        exit();
    }           
}

$_GET["user_id"] は SESSION または COOKIE と同じですが、とにかく 404.php に向かいます。誰かが理由を説明できますか?

4

3 に答える 3

2

これは意図したとおりに機能するはずです。

function user_exists()
{
    if (isset($_SESSION["user_id"]) && ($_SESSION["user_id"] !== $_GET["user_id"])
    {
        header("location: 404.php");
        exit();
    }
    elseif (isset($_COOKIE["user_id"]) && ($_COOKIE["user_id"]) !== $_GET["user_id"])
    {
        header("location: 404.php");
        exit();
    }           
}

最初に格納された変数が空かどうかを確認し、その内容を $_GET 変数と比較します。

于 2012-09-17T12:27:02.030 に答える
0

設定されているかどうかを確認してから比較します...

if (isset($_SESSION["user_id"]) && ($_SESSION["user_id"] !== $_GET["user_id"])){... 
于 2012-09-17T12:26:35.567 に答える
0

Equal to および of the Same Type比較を使用して比較しています。

GET データは常に文字列としてポストされるため (これがまさにそのように機能します)、文字列に対して int をチェックしている可能性があります。!=overに切り替える!==とおそらくうまくいくでしょう。または、比較でテストする前に、派手なタイプのジャグリングを行って、自分でそれを変換することもできます。

于 2012-09-17T12:23:10.067 に答える