PHP cookie使用方法與注意事項

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.