2013-07-16 38 views
1

在PHP中設置cookie真的很奇怪。我基本上已經實現了一個登錄函數(真的,真的運行的工廠),想法是,如果數據庫返回一行,在用用戶名和密碼查詢後,那就沒事了。我使用查詢數據庫奇怪的Cookie行爲

代碼(似乎很好地工作):

$statement = $db->prepare("SELECT COUNT(*) FROM staff_accs WHERE username=:username AND password=:password"); 
    $statement->bindParam(':username', $username); 
    $statement->bindParam(':password', $password); 
    $statement->execute(); 

我使用的是測試如果返回的行的代碼。再次,似乎工作正常。

if($statement->fetchColumn() === "1") 
    { 
     $cookieValue = sha1($username.$password); 

     setcookie('admin', $cookieValue, 3600, '/'); 
     $_COOKIE['admin'] = $cookieValue; 
     header("Location: ../admin.php"); 
    } 
    else 
    { 
     // Re-direct to no permissions page. 
     header("Location: ../noPermission.html"); 
    } 

該代碼重新指向正確的頁面,但未設置Cookie。我已將路徑設置爲「/」以確保它是全局可用的(沒有「/」時它不起作用)。我也在調用該方法後直接設置該值,以確保cookie被直接設置。

然而,當我到達admin.html頁面,我打電話var_dump$_COOKIE一個數組,這就是我得到:

​​

所以它出現在cookie不會被設置,儘管事實上正確的代碼塊正在運行..

+1

如果刪除重定向,確實該cookie獲取設置? –

+0

我剛測試過。事實上,確實如此。爲什麼會重新導致cookie不被存儲? – christopher

+0

刷新admin.php並再次檢查 – 2013-07-16 20:15:32

回答

3

問題出在您撥打setcookie。第三個參數需要一個時間戳,而不是一個持續時間。在這裏,即使存在,您的cookie也會過期。 你應該嘗試:

setcookie('admin', $cookieValue, time() + 3600, '/'); 
+0

可愛的寶貝耶穌。我一直在PHP編程兩年;我怎麼會犯這樣一個愚蠢的錯誤!?謝謝,我會在6分鐘內接受。 :) – christopher

+0

@Chris:每個人都犯錯誤。如有疑問,檢查文檔是一個好習慣。 ;-) – Levans