程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP cookie使用方法與注意事項

PHP cookie使用方法與注意事項

編輯:關於PHP編程

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);
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時有幾個參數,刪除時也要有幾個參數,否則容易出錯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved