cookie是一個用於存儲信息到客戶端浏覽器中的我們可以利用cookie來記錄用戶的一些相關信息,像站長統計代碼就基於cookie與ip來實現的,下面我來介紹cookie使用與注意事項。
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);獲取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時有幾個參數,刪除時也要有幾個參數,否則容易出錯。