PHP cookie用法
| 代碼如下 |
複製代碼 |
setcookie('mycookie','value'); //函數原型:int setcookie(string name,string value,int expire,string path,string domain,int secure) echo($mycookie); echo($HTTP_COOKIE_VARS['mycookie']); echo($_COOKIE['mycookie']); |
刪除Cookie
(1)調用只帶有name參數的setcookie();
(2)使失效時間為time()或time-1;
| 代碼如下 |
複製代碼 |
<?php setcookie('name'); ?> setcookie('mycookie');或setcookie('mycookie','');或setcookie("mycookie",false); //setcookie('mycookie','',time()-3600); echo($HTTP_COOKIE_VARS['mycookie']); print_r($_COOKIE); |
建議刪除方法:
| 代碼如下 |
複製代碼 |
setcookie('mycookie','',time()-3600); |
PHP提供一個很好用的函數mktime()。
你只要按順序傳送給mktime()你希望表示的小時,分鐘,秒數,月份,日期,及年份,
mktime()就會返回該日期自1970年1月1日的總秒數。
因此,如果需要類比 Y2K 問題:
| 代碼如下 |
複製代碼 |
$y2k = mktime(0,0,0,1,1,2000); setcookie('name','value',$y2k); setcookie('name', 'value', time+3600); setcookie('name', 'value', $y2k, '~/myhome', '.domain.com'); |
擷取COOKIE到期時間的辦法
| 代碼如下 |
複製代碼 |
$expire = time() + 86400; // 設定24小時的有效期間 setcookie ("var_name", "var_value", $expire); // 設定一個名字為var_name的cookie,並制定了有效期間 setcookie ("var_name_expire", $expire, $expire); // 再將到期時間設定進cookie以便你能夠知道var_name的到期時間 |
註:
在發送 cookie 時,cookie 的值會自動進行 URL 編碼。接收時會進行 URL 解碼。
如果你不需要這樣,可以使用 setrawcookie() 代替。
PHP設定、擷取與刪除COOKIE
| 代碼如下 |
複製代碼 |
//--------設定COOKIE,1小時後到期------// setcookie('TestCookie','hello word 秦迷',time()+3600); //setrawcookie不進行URL編碼 header('Content-type: text/html'); //查看發送的前序 var_dump(headers_list());#array(2) { [0]=> string(85) "Set-Cookie: TestCookie=hello+word+%C7%D8%C3%D4; expires=Tue, 19-Apr-2011 10:06:14 GMT" [1]=> string(23) "Content-type: text/html" } echo '<br>'; echo $_COOKIE['TestCookie'];#hello word 秦迷 //相容舊版本(淘汰) if(isset($HTTP_COOKIE_VARS["TestCookie"])){ echo $HTTP_COOKIE_VARS["TestCookie"]; } echo '<br>'; //輸出所有 cookie print_r($_COOKIE);#Array ( [key] => value [TestCookie] => hello word 秦迷 ) ?> <script type="text/javascript"> <!-- alert(document.cookie); //--> </script> <?php //-----設定數組COOKIE-------// setcookie("cookie[one]","oneVal",time()+3600); setcookie("cookie[two]","twoVal",time()+3600); echo '<br>'; echo $_COOKIE['cookie']['two'];#twoVal echo '<br>'; //輸出 cookie (在重載頁面後) if (isset($_COOKIE["cookie"])) { foreach ($_COOKIE["cookie"] as $name => $value) { echo "$name : $value <br>"; /** * two : twoVal * one : oneVal */ } } //設定到期,刪除COOKIE //setcookie('TestCookie', '', time() - 3600); //setcookie('cookie[one]', '', time() - 3600); |
方法一:
在PHP裡Cookie的使用是有一些限制的。
1、使用setcookie必須在<html>標籤之前
2、使用setcookie之前,不可以使用echo輸入內容
3、直到網頁被載入完後,cookie才會出現
4、setcookie必須放到任何資料輸出瀏覽器前,才送出
由於上面的限制,在使用setcookie()函數時,學會遇到 “Undefined index”、”Cannot modify header information – headers already sent by”…等問題,解決辦法是在輸出內容之前,產生cookie,可以在程式的最上方加入函數 ob_start();
ob_start :開啟輸出緩衝區
函數格式:void ob_start(void)
說明:當緩衝區啟用時,所有來自PHP程式的非檔案頭資訊均不會發送,而是儲存在內部緩衝區。為了輸出緩衝區的內容,可以使用ob_end_flush()或flush()輸出緩衝區的內容。
方法二:
解決Warning: Cannot modify header information – headers already sent by ……
前幾天裝了個php的大頭貼系統測試,發現報錯Warning: Cannot modify header information – headers already sent by ….今天又裝openads,還是出現這個問題。怒了。上網找了半天,有人說要在檔案開頭寫上ob_start();,結果失敗。後來開啟 php.ini 然後把 output_buffering 設為 on 。重起appache,OK。看來這才是解決辦法。
特別注意:如果使用utf-8編碼,一定要去掉UTF-8中的BOM,這都是因為utf-8編碼檔案含有的bom原因,而php4,5都是不支援bom的。去掉bom,可以用Notepad++開啟轉換一下。切記,切記,切記!(這問題害我折騰了半天。)
方法三:
當前設定的Cookie 不是立即生效的,而是要等到下一個頁面時才能看到.這是由於在設定的這個頁面裡
Cookie由伺服器傳遞給客戶瀏覽器,在下一個頁面瀏覽器才能把Cookie從客戶的機器裡取出傳回伺服器的原
因。在同一個版面設定Cookie,實際是從後往前,所以如果要在插入一個新的Cookie之前刪掉一個,你必須
先寫插入的語句,再寫刪除的語句,否則可能會出現不希望的結果。
刪除一個COOKIE時,該COOKIE的值在當前頁面仍然是有效,也就是值還是存在的,在下次請求該頁面或其它頁面時就不會存在了。也就是說PHP的COOKIE相關操作都是非同步,當前面設定或刪除了COOKIE,要等到下次請求時才能正確反應出來。
刪除COOKIE時最好不要用setcookie(cookie名)這種方法,這樣很容易刪除整個COOKIE數組,具體我不細說了,注意就行了,刪除COOKIE的最好方法是設有效時間為過去,當瀏覽器發現COOKIE有效期間過後會確發刪除COOKIE事件,還有一點要注意的時,設定COOKIE時有幾個參數,刪除時也要有幾個參數,否則容易出錯。