2012-05-10 208 views
15

我需要弄清楚如何取消設置這個cookie。我到目前爲止所嘗試的一切都失敗了如何在PHP中取消cookie設置?

這是我目前如何取消它,它似乎並沒有工作。

setcookie("user_id", $user_id, time() - 7200); 

這是我的設置:

setcookie("user_id", $user_id, time() + 7200); 

我有這個功能稱爲set_session_from_cookie()如果設置cookie來檢查,如果它被設置,它使用cookie開始一個新的會話。

問題是,當我在我的頁面上使用此功能時,我無法註銷。我認爲這是因爲我無法解除會話。

我有這個功能的原因是,如果用戶想在結束會話後被記住,他們可以通過調用cookie重新啓動會話。

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

註銷:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

設置我的cookie用下面的代碼:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

我怎樣才能重新啓動,而無需使用我創建的功能使用保存的Cookie的對話?由於該功能似乎導致用戶不再能夠註銷。

+0

是你的cookie應該是整個網站的? –

+0

應該是?我怎麼知道? – arboles

+4

請勿使用相對時間來取消設置Cookie。這使得取消設置取決於用戶的時鐘是否準確。使用'1'的時間,這將抓住每個人,但那些真正破碎的時鐘誰認爲是1970年。 –

回答

9

對這一問題的解決方案是,我需要設置正確的路徑來取消該cookie因爲我從一個不同的文件中刪除它,我原來設置它。

我找到了我需要用於未設置的路徑,方法是在瀏覽器cookie中查找cookie,一旦找到cookie瀏覽器,路徑被列在cookie附近。因此,我然後設置Cookie的路徑,如下所示:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

最後一個參數是路徑。它的工作。

我原來setcookie看起來是這樣的:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

將cookie的到期日期設置爲過去的時間(例如,在epoch之後的一秒)。

setcookie("yourCookie", "yourValue", 1);

這將導致該cookie到期。

1代替0,因爲0將cookie設置爲在會話結束時過期。

+0

是1被認爲是過去的時間? – arboles

+1

@arboles時間以UNIX時間戳的形式給出,所以是的,1很久以前:) –

+13

1是「1st of 1st,19:70 00:00:01 AM」 –

3

看看PHP手冊信息的setcookie

http://php.net/manual/en/function.setcookie.php

這些注意事項應該解釋這個過程:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

Cookies必須具有相同的參數被刪除,因爲它們是設與 。如果value參數是空字符串或FALSE,並且所有其他參數都與先前對setcookie的調用相匹配,則將從遠程客戶端中刪除具有指定名稱的Cookie 。這個 內部通過設置值'刪除'和到期時間到過去一年達到。

因爲設置一個值爲FALSE的cookie會嘗試刪除 cookie,所以不應該使用布爾值。相反,對於FALSE 使用0,對TRUE使用1。

+0

我目前這樣做,使用相同的參數刪除,因爲我要設置。它不工作。 – arboles

6

有關於你的代碼少的安全問題,但回答你的問題,取消設置在PHP中的cookie,所有你需要做的是到期時間過去設定時間:

setcookie("user_id", "", time()-10, "/"); 

「loginform.php」不是一個有效的域,這可能是這裏的問題。

+0

如何在本地主機上設置域? – arboles

+0

只是像我在例子「/」中那樣放了一個斜槓,就是這樣,這意味着這個cookie可用於您的所有域。 –

1

在PHP手冊,您可以通過設置截止日期刪除cookie是過去:

setcookie("key","",time()-3600); 

在某些情況下,你應該提供參數路徑和域。

事實上,如果你指定一個空字符串一個cookie,它會也取消設置:

setcookie("key",""); 
+0

我知道,我目前正在做這種方法,它不工作。 – arboles

+0

也許你可能需要手動指定路徑和域名。 –

4

使用此代碼

setcookie("CookieName", "", time()-(60*60*24), "/"); 

每次工作對我來說在每一個網站