php刪除cookie的實作方法:1、透過「setCookie("name","",time()-60);」刪除單一cookie;2、採用foreach遍歷陣列的方式刪除多個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", ''); 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'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, '');或者 setcookie($cookiename, NULL);
都会删除cookie,当然这些手册中并没有。
以上是php刪除cookie的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!