2013-01-23 64 views
0

我在login.php中我的餅乾在哪裏?

if ($sth->execute()) { 
    $row = $sth->fetch(PDO::FETCH_ASSOC); 
    if ($row) { 
     var_dump($row); // See below 
     $_SESSION['login'] = $row['login']; 
     setcookie('login', $row['login'], time() * 7 * 24 * 60 * 60); 
     if ($row['right'] == ACCESS_ADMIN) { 
      echo "true"; // true 
      $_SESSION['right'] = ACCESS_ADMIN; 
      setcookie('right', $row['login'], time() * 7 * 24 * 60 * 60); 
     } 
    } 
} 


var_dump($row) - array(3) 
{ 
    ["login"]=> string(6) "phplox" 
    ["password"]=> string(32) "827ccb0eea8a706c4c34a16891f84e7b" 
    ["right"]=> string(5) "admin" 
} ?> 
<br> 

好了,沒事了這些代碼。轉到index.php。

<?php var_dump($_COOKIE) ?> `// array(1) { ["PHPSESSID"]=> string(26) "o05mr9luc2ok8ieadss4v9mhg0" }` 

但如果

<?php var_dump($_SESSION) ?> // 

結果是:

array(3) 
{ 
    ["request_token"]=> string(32) "335f1dcd4283889f0f2fe602cfa36d71" 
    ["login"]=> string(6) "phplox" ["right"]=> string(5) "admin" 
} 
+0

那麼,你確切的問題是什麼? –

+0

你在嘗試什麼?你想要什麼? – Sky

+0

Cookie爲空。 – row248

回答

0

設置cookie之前,您不能發送任何輸出。 Cookies是通過HTTP標頭髮送的,所以必須在任何輸出發送到瀏覽器之前發送它們。在這裏,你呼應的東西,然後嘗試設置Cookie:

  echo "true"; // <--- REMOVE THIS 
      $_SESSION['right'] = ACCESS_ADMIN; 
      setcookie('right', $row['login'], time() + (7 * 24 * 60 * 60)); // add to the time, don't multiply time() 

您還可以檢查setcookie()的返回值,如果輸出已發送返回boolean false

+0

可能,但他並不是抱怨緩衝區錯誤,對於我們所知的第1行,他有'ob_start();' – AlienWebguy

+0

setcookie()returs false。 – row248

+0

@ row248是的,正如在我的回答中所說 - 由於'echo',cookie不能說。 – MrCode

0

此:

time() * 7 * 24 * 60 * 60 

溢出,所以它周圍的包裝int值並創建指的是過去的,因此,瀏覽器將不會創建的cookie的值。將其更改爲:

time() + 7 * 24 * 60 * 60 

而且,MrCode說,不,除非你用ob_start()發送的cookie發送前輸出。

希望這會有幫助

+0

Im delete echo「true」。並改變時間()+ 7 * 24 * 60 * 60但它不起作用。 – row248

+0

然後檢查'setcookie()'的返回值。 – vanneto