我有一个包含以下代码的登录表单
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,有人可以向我解释原因吗?
答案 0 :(得分: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变量进行比较。
答案 1 :(得分:0)
您正在使用等于和相同类型比较进行比较。
GET Data始终作为字符串发布(这就是它的工作方式)所以你可能正在检查一个字符串的int。切换到!=
超过!==
可能会对你有所帮助,或者你可以做一些花哨的类型杂耍,然后再在比较中测试它以将其转换为自己。
答案 2 :(得分:0)
检查是否已设置,然后比较......
if (isset($_SESSION["user_id"]) && ($_SESSION["user_id"] !== $_GET["user_id"])){...