test - set cookie php




刪除一個cookie (13)

當我想刪除Cookie時,我嘗試

unset($_COOKIE['hello']);

我從firefox的cookie瀏覽器中看到該cookie仍然存在。 我怎樣才能真正刪除cookie?


一個乾淨的方式來刪除一個cookie是清除$_COOKIE值和瀏覽器cookie文件:

if (isset($_COOKIE['key'])) {
    unset($_COOKIE['key']);
    setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}

你可以簡單地使用這個自定義功能:

function unset_cookie($cookie_name) {
    if (isset($_COOKIE[$cookie_name])) {
        unset($_COOKIE[$cookie_name]);
        setcookie($cookie_name, null, -1);
    } else { return false; }
}

如果你想刪除$ _COOKIE ['user_account']。
只需使用:

unset_cookie('user_account');

你必須在你的服務器中用php刪除cookie,並且還要用js來為你的瀏覽器刪除cookie。(他們用php做了,但cookie文件也在瀏覽器客戶端中):

一個例子:

if ($_GET['action'] == 'exit'){
            // delete cookies with js and then in server with php:
            echo '
            <script type="text/javascript">
                var delete_cookie = function(name) {
                     document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
                };
                delete_cookie("madw");
                delete_cookie("usdw");
            </script>
            ';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);

大多數人都忘記了這只會在本地機器上運行。 在一個域中,你將需要一個像這個例子一樣的模式。

setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);

如果您想要“移除”cookie,只需將過期日期設置為一小時前,如下所示:

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

要么

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);

資料來源: http://www.php.net/manual/en/function.setcookie.php : http://www.php.net/manual/en/function.setcookie.php

您應該使用filter_input()函數來訪問訪問者可以輸入/處理的所有全局變量,如下所示:

$visitors_ip = filter_input(INPUT_COOKIE, 'id');

你可以在這裡閱讀更多關於它的信息: http://www.php.net/manual/en/function.filter-input.php : http://www.php.net/manual/en/function.filter-input.php和這裡: http://www.w3schools.com/php/func_filter_input.asp : http://www.w3schools.com/php/func_filter_input.asp


將值設置為“”,並將到期日期設置為昨天(或過去的任何日期)

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

然後,Cookie將在下次加載頁面時過期。


我在我的代碼中遇到同樣的問題,發現它是一個cookie路徑問題。 看看這個堆棧溢出帖子: 不能刪除php設置cookie

我已經使用路徑值“/”設置了cookie,但是當我試圖清除它時沒有任何路徑值,所以它不清楚。 所以這是一個有效的例子:

設置cookie:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

清除cookie:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

希望有所幫助。


我知道自從創建這個話題已經有很長一段時間了,但是我在這個解決方案中看到了一個小錯誤(我可以這樣稱呼它,因為它是一個細節)。 我同意更好的解決方案可能是這種解決方案:

if (isset($_COOKIE['remember_user'])) {
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            return true;
        } else {
            return false;
        }

但是,在目前的情況下,您可以在任何未設​​置功能工作的情況下刪除Cookie,並立即在未設置功能不起作用的情況下創建新的過期Cookie。

這意味著即使未設置功能正常工作,計算機上仍會有2個Cookie。 從邏輯的角度來看,要求的目標是在可能的情況下刪除cookie,如果確實沒有,則使其過期; 獲得“最乾淨”的結果。

所以,我認為我們應該做得更好:

if (isset($_COOKIE['remember_user'])) {
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            return true;
        } else {
            return false;
        }

感謝,並有一個愉快的一天 :)


要刪除cookie,只需將該值設置為NULL即可:

“如果您設置了一個包含過期時間,路徑或域的非默認值的cookie,當您刪除cookie以便正確刪除cookie時,您必須再次提供相同的值。” 從“學習PHP5”書中引用。

所以這段代碼應該可以工作(適用於我):

設置cookie: setcookie('foo', 'bar', time() + 60 * 5);

刪除cookie: setcookie('foo', '', time() + 60 * 5);

但我注意到,每個人都將過期日期設置為過去,是否有必要,為什麼?


要刪除您可以編寫的所有Cookie:

foreach ($_COOKIE as $key => $value) {
    unset($value);
    setcookie($key, '', time() - 3600);
}

這很簡單!

setcookie("cookiename", "cookievalue", 1);

這是PHP v7 setcookie()代碼在您執行時的工作方式:

<?php
    setcookie('user_id','');
    setcookie('session','');
?>

在端口80上嗅探時,從tcpdump的輸出中,服務器向客戶端(瀏覽器)發送以下HTTP標頭:

Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0

在以下請求中觀察數據包時,瀏覽器不再在標頭中發送這些cookie


$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";

// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds

// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];

// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");

// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); //  time() - 3600 means, set the cookie expiration date to the past hour.




cookies