php 刪除cookie有效方法

 

php 刪除cookie有效方法
關於刪除cookie的說明開始-----php

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )html

要刪除cookie須要確保它的失效期是在過去,才能觸發瀏覽器的刪除機制。linux

下面的例子說明了如何刪除剛纔設置的cookie:
<?php
//將過時時間設爲一小時前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>程序員


-----關於刪除cookie的說明結束-----數組

刪除一個cookie的方法就是把這個cookie的有效期設置爲當前時間之前,這也是幾乎全部php程序員都會這麼作。瀏覽器

後來一個初接觸php的朋友告訴我,他在程序中本想把一個cookie的值設置爲空,結果致使這個cookie直接被刪除。我當時的第一反應是不相信,因而測試
了一下:
setcookie("testcookie", '');
print_r($_COOKIE);cookie


結果果真是整個$_COOKIE數組都是空的,而非僅僅$_COOKIE['testcookie']爲空。因而用winsock抓包,觀察返回的http頭,發現http頭居然是「Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT」,這說明「setcookie("testcookie", '');」的的確確是將testcookie這個cookie直接刪除,而關於這種狀況在php手冊中徹底沒有說明。dom

最後閱讀php源碼,終於發現真相(這就是開源的好處了,有什麼不清楚的內幕,直接查源碼)。測試

如下代碼能夠在php5.20的linux源碼包中ext/standard/head.c第99行附近找到:
if (value && value_len == 0) {
    /*
     * MSIE doesn't delete a cookie when you set it to a null value
     * so in order to force cookies to be deleted, even on MSIE, we
     * pick an expiry date 1 year and 1 second in the past
     */
    time_t t = time(NULL) - 31536001;
    dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
    sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
    efree(dt);
} else {
    sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
    if (expires > 0) {
        strcat(cookie, "; expires=");
        dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
        strcat(cookie, dt);
        efree(dt);
    }
}.net


源碼中清清楚楚的顯示「if (value && value_len == 0)」,當「value_len」爲0時,「sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);」會發送刪除cookie的http頭給瀏覽器。

最後咱們能夠得出結論:在php中使用「setcookie($cookiename, '');」或者「setcookie($cookiename, NULL);」都會刪除cookie,固然這些手冊中並無。

來源:http://www.111cn.net/phper/21/f0eace11b1229a0f2c7c54e3c1ea4654.htm

相關文章
相關標籤/搜索