2015-09-02 67 views
2

我無法用我的php代碼刪除cookie。當我按logout頁面刷新,但cookie仍然存在。我無法用PHP刪除cookie

<?php 
if (isset($_COOKIE["admin_login"])) { 
    echo "Cookie: ".$_COOKIE["admin_login"]."<br>"; 
} 
if (isset($_GET["logout"])) { 
    setcookie("admin_login", "", time()-3600); 
    unset($_COOKIE['admin_login']); 

} 
?> 
<html> 
<body> 
    <a href="?logout">Logout</a> 
</body> 
</html> 
+1

看看HTTP響應頭,應該有一個'setcookie'頭。檢查它是否設置過去的日期。 –

+3

有沒有你設置你自己的cookie而不是使用PHP $ _SESSION的原因?並不是說沒有合法的理由來推出自己的會話,但$ _SESSION是更可取的。 – samlev

回答

1

這可能是因爲您在設置cookie之前輸出數據而發生的。

setcookie()定義了一個cookie,與其餘的HTTP頭一起發送。與其他標題一樣,Cookie必須在您的腳本輸出之前發送(這是協議限制)。

if (isset($_COOKIE["admin_login"])) 
    anything_that_doesnt_output_text(); // text was causing problem most likely. 

if (isset($_GET["logout"])) 
    setcookie("admin_login", "", time()-3600); // also, no unsetting 
+1

我很抱歉的朋友,我沒有看到這個評論,是的,你是對的,它按照你說的方式工作,但最終我從會話中的cookies切換。謝謝。 – Riki

+1

儘管如此,您仍然可以將其標記爲答案,因爲這是您的問題的答案。切換到會話是一個解決方法。 –

0

謝謝您的解答。找不到解決方案後,我嘗試切換到SESSION。

經過一些研究,我使它很好。謝謝大家幫助我。

如果有人有興趣,這是我的最終代碼。

<?php 
session_start(); 
if (isset($_GET["logout"])) { 
    session_unset(); 
    session_destroy(); 
    header("Location: ../login.php");  
} 
if (isset($_SESSION["admin_login_session"])) { 
    echo "Cookie: ".$_SESSION["admin_login_session"]."<br>"; 
} else { 
    header("Location: ../login.php"); 
} 

?> 
<html> 
<body> 
    <a href="?logout">Logout</a> 
</body> 
</html> 
+0

老實說,你沒有找到我簡單的答案工作?請留下評論我的回答,所以我知道如果沒關係或者我應該刪除它。 – DeDee