首頁 > 後端開發 > PHP問題 > php刪除cookie的實作方法

php刪除cookie的實作方法

藏色散人
發布: 2023-03-07 10:50:01
原創
2092 人瀏覽過

php刪除cookie的實作方法:1、透過「setCookie("name","",time()-60);」刪除單一cookie;2、採用foreach遍歷陣列的方式刪除多個cookie 。

php刪除cookie的實作方法

推薦:《PHP影片教學

php 刪除cookie

php批次刪除cookie的簡單實作方法

程式碼如下:

<?php
//删除单个cookie:键值设置为空、时间设置为过期了的时间
setCookie("name","",time()-60);
//删除多个cookie,采用遍历数组方式
foreach($_COOKIE as $key=>$value){
 setCookie($key,"",time()-60);
}
?>
登入後複製

知識要點:如果把某個網站的所有cookie都刪除了,則儲存該網站cookie的文件,也將會被刪除;如果只是刪除其中一個cookie,則只在檔案裡的該cookie資訊被刪除。

PHP Cookie的使用

1、設定Cookie

PHP用SetCookie函數來設定Cookie。必須注意的一點是:Cookie是HTTP協定頭的一部分 ,用於瀏覽器和伺服器之間傳遞訊息,所以必須 在任何屬於HTML檔案本身的內容輸出之前呼叫 Cookie函數。

SetCookie函數定義了一個Cookie,並且把它附加在HTTP頭的後面,SetCookie函數的原型如下:

int SetCookie(string name, string value, int expire, string path, string domain, int secure);
登入後複製

除了name之外所有的參數都是可選的。 value,path,domain三個參數可以用空字串代換,表示沒有設定;expire 和 secure兩個參數是數值型的,可以用0表示。 expire 參數是一個標準的Unix時間標記 ,可以用time()或mktime()函數取得,以秒為 單位。

secure 參數表示這個Cookie是否透過加密 的HTTPS 協定在網路上傳輸。

目前設定的Cookie不是立即生效的,而是要等到下一個頁面時才能看到。這是由於在設定的這個頁面裡Cookie由伺服器傳遞給客戶瀏覽器,在下一個頁面瀏覽器才能把Cookie從客戶的機器取出傳回伺服器的原因。

在同一個頁面設定Cookie,實際上是從後往前,所以如果要在插入一個新的Cookie之前刪除一個,你必須先寫插入的語句,再寫刪除的語句,否則可能會出現不希望的結果。

來看幾個例子:

簡單的:

SetCookie("MyCookie", "Value of MyCookie");
登入後複製

帶失效時間的:

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时
登入後複製

什麼都有的:

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);
登入後複製

這裡還有一點要說明的,例如你的網站有幾個不同的目錄,那麼如果只用不帶路徑的Cookie的話,在一個目錄下的頁面裡設的Cookie在另一個目錄的頁面裡是看不見的,也就是說,Cookie是面對路徑的。實際上 ,即使沒有指定路徑,WEB伺服器會自動傳遞目前的路徑給瀏覽器的,指定路徑會強 制伺服器使用設定的路徑。解決這個問題的方法是在呼叫SetCookie時加上路徑和域名,域名的格式可以是“www.phpuser.com”,也可是 “. phpuser.com”。

SetCookie函數裡表示value的部分,在傳遞時會自動被encode ,也就是說,如果value的值是“test value”在傳遞時就變成了“test value”,跟URL的方法一樣。當然,對於程式來說這是透明的,因為在PHP接收Cookie的值時會 自動將其decode。

如果要設定同名的多個Cookie ,要用數組,方法是:

SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");
登入後複製

SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");
登入後複製

2、接收和處理Cookie

PHP對Cookie的接收和處理的支援非常好,是完全自動的,跟FORM變數的原則一樣,特別簡單。

例如設定一個名為MyCookier的Cookie,PHP會自動從WEB伺服器接收的HTTP頭裡把它分析出來,並形成一個與普通變數一樣的變量,名為$ myCookie,這個變數的值就是Cookie的值。數組同樣適用。另外一個辦法是引用PHP的全域變數$HTTP_COOKIE_VARS陣列。

分別舉例如下:(假設這些都在以前的頁面裡設定過了,而且仍然有效)

echo $MyCookie;
echo $CookieArray[0];
echo count($CookieArray);
echo $HTTP_COOKIE_VARS["MyCookie"];
登入後複製

就這麼簡單。

3、刪除Cookie

要刪除一個已經存在的Cookie,有兩個方法:

一是呼叫只帶有name參數的SetCookie,那麼就名為這個name的Cookie將被從關係戶機上刪除;

另一個辦法是設定Cookie的失效時間為time()或time()-1 ,那麼這個Cookie在這個頁面的瀏覽完之後就被刪除了(其實是失效了)。

要注意的是,當一個Cookie被刪除時,它的值在當前頁在仍然有效的。

4、使用Cookie的限制

首先是必須在HTML檔案的內容輸出之前設定;

其次不同的瀏覽器對Cookie的處理不一致辭,且有時會出現錯誤的結果。例如: MS IE SERVICE PACK 1無法正確處理有網域名稱和路徑的Cookie,Netscape Communicator 4.05和MS IE 3.0無法正確處理不含路徑和時間的Cookie。至於MS IE 5 好像不能處理有網域名稱、路徑和時間的Cookie。這是我在設計本站的頁面時發現的。

第三個限制是在客戶端的。

一個瀏覽器能 創建的Cookie數量最多為30個,且每個 不能超過4KB ,每個WEB站點 能設定的Cookie總數不能超過20個 。

PHP 刪除COOKIE 方法

#

首先我们看一下php手册中关于删除cookie的说明

------以下引用php手册内容--------------

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
登入後複製

要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除

例子

// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束--------------------------
登入後複製

删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这

也是几乎所有php程序员都会这么做。

后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试了一下

setcookie("testcookie", &#39;&#39;);
print_r($_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手册中完全没有说明.

最后阅读php源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕直接查源码)

以下代码可以在php5.20的Linux源码包中ext/standard/head.c第99行附近找到.

if (value && value_len == 0) {
/*
    * MSIE doesn&#39;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);
}
}
登入後複製

源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0时

sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
登入後複製

会发送删除cookie的http头给浏览器.

最后我们可以得出结论,在php中使用

setcookie($cookiename, &#39;&#39;);或者 setcookie($cookiename, NULL);
登入後複製

都会删除cookie,当然这些手册中并没有。

以上是php刪除cookie的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板