2012-09-17 61 views
0

我有下面的代码PHP SESSION和COOKIE

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页面发送一个ID与URL。所以我建立一个函数,当用户在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的”]等于会话或Cookie,但它无论如何朝向对404.php,可有人向我解释,为什么?

+2

isset()函数返回true或false,你是一个布尔值比较字符串(这应该alawys是假的) –

+0

@GeraldSchneider我无法相信我错过了。弹出成答案,你有我的+1马上:) – Fluffeh

+0

啊,这是我的错误,我想我可以比较这些值。所以首先检查它的设置,然后比较Thhx的快速答案 – Julez

回答

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变量。

+0

Thhx这工作 – Julez

0

您使用的是等于同类型比较和对比。

GET数据总是发布为一个字符串(这就是它是如何工作的),所以你可能在检查对一个字符串一个int。切换到!=超过!==可能会做的伎俩你,或者你在比较测试它在自己隐蔽前,你可以做一些奇特的类型戏法。

0

检查,如果它被设置,然后比较...

if (isset($_SESSION["user_id"]) && ($_SESSION["user_id"] !== $_GET["user_id"])){...