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

您正在使用Equal to 和 of the Same Type比较进行比较。

GET Data 总是作为字符串发布(这就是它的工作方式),因此您可能正在检查一个 int 与一个字符串。切换到!=over!==可能会为您解决问题,或者您可以在比较测试之前做一些花哨的类型杂耍,以将其隐藏在自己身上。

于 2012-09-17T12:23:10.067 回答
0

检查是否设置,然后比较...

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