2012-10-07 188 views
0

在PHP中設置Cookie時出現問題。 這是我用來設置cookie的代碼,如果複選框被選中。未在PHP中設置Cookie

<?php 
    if(isset($_POST['remember'])){ 
    setcookie("loggedemail",$email,"time()+3600","/"); 
    setcookie("loggedpassword",$password,"time()+3600","/"); 
    echo $_COOKIE['loggedemail']; 
    echo $_COOKIE['loggedpassword']; 
} 
?> 

這裏'記住'是我用來設置cookie的複選框的ID。 這裏的問題是

  • 我無法看到Chrome的資源選項卡上的餅乾,當我 點擊「檢查元素」。
  • 我無法看到任何回聲。
  • Cookie未設置。

另外,當某人退出會話時,我無法刪除會話cookie。 session_destroy();似乎沒有做到這一點,因爲Chrome仍然顯示Cookie設置爲活動狀態。

我該如何解決這些問題?

回答

0

您將時間作爲字符串傳遞。這裏有問題,所以改變你的php代碼如下

setcookie("loggedemail",$email,time()+3600,"/"); 
setcookie("loggedpassword",$password,time()+3600,"/"); 

Cookie不是會話的一部分,所以你不能使用session_destroy()。

如果你想刪除的cookie,那麼你必須將時間設置爲過去的時間如下

setcookie("loggedemail", "", time()-3600); 
+0

對不起,我已將名稱屬性設置爲「記住」,而不是id。我的錯。但是,我仍然不確定爲什麼cookie沒有被創建。 我通過按代碼建議的時間來檢查。還有什麼想法? – palmi

+0

你在var_dump($ _ POST)中得到了什麼?你是否獲得了$ email&$密碼的價值? – GBD

0

session_destroy()不取消在它的會話ID cookie的,它只是象垃圾一樣清除會話數據。

你說複選框的id屬性是'remember' - 它是否有名稱屬性?如果不是這就是爲什麼一切都不工作的id不會發布到每個HTML定義的表單操作。

0

如果你不喜歡這樣寫道:

setCookie("cookieName", "value", time() + 3600); 

它的工作(如果你沒有改變任何瀏覽器設置)。但是,該變量在下一次加載頁面之前不可用。不過,您應該可以在Chrome開發工具中看到它。如果沒有,請在設置cookie之前確保100%不輸出任何內容。

關於你的第二個問題,session_destroy()銷燬了一個會話,但它不會使已經發送給客戶端的cookie失效。您需要通過設置其到期時間手動使其失效。

1

$_COOKIE的值通過讀取從瀏覽器接收到的cookie進行設置。

爲了從瀏覽器接收cookie,必須:在PHP中設置 - >瀏覽器應該加載 - >用戶應該導航到下一頁(或提交表單)。

所以基本上如果你使用setcookie你不能讀$_COOKIE,直到下一次刷新。這就是爲什麼echo沒有顯示任何東西。他們顯示NULL - 確認這個使用var_dump,你會看到輸出。