close

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-3.htm


  Cookie函數
 
 

 

 

 在PHP中,要使用Cookie的指令只有一個

setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
 
換個寫法:setcookie("Cookie變數名稱","Cookie數值","期限","路徑","網域","安全")

 除了Cookie的「變數名稱」參數一定要有之外,其餘可省略;參數的說明如下表:

參數名稱
參數說明
Cookie名稱(Name) Cookie的名稱,以PHP來說,就是變數的名稱,例如 cookiename 就好比 $_COOKIE['cookiename']
Cookie值(Value) 就是Cookie名稱的值
留存時間(Expire) Cookie的留存時間,以「秒」為單位,例如要留存30天,那就要用「time( )+30*24*60*60」(
time( )函數表示取得現在的時間+30天*24小時*60分*60秒) ;如果沒有設定,當瀏覽器關掉時,cookie也跟著結束。
路徑(path) 指在哪些目錄下的檔案可以使用Cookie
網域名稱(Domain) 用來設定哪些網域可以使用Cookie
安全性(Secure) 如果結合HTTPS安全傳輸協定(SSL),就是「1」,一般則為「0」。

 

 使用setcookie( )函數時,得先注意下列事項:

  1.  
    1. 與session_start( )函數的狀況一樣,在使用setcookie( )函數時,之前都不可以有任何的結果輸出,例如不可以在setcookie( )之前使用echo 輸出變數或將setcookie ( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。
    2. 如果 php.ini 的「register_globals」設為 on,只要在cookie有效期限用,可以直接使用 $變數輸出變數的內容,但如果設成 off ,則需要用 $_COOKIE["名稱"] $HTTP_COOKIE_VARS["名稱"] 方式取得內容。
    3. 如果沒有設定留存時間,雖然有指定cookie名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的 Cookie。
    4. 如果要刪除cookie的話,直接把要刪除cookie名稱的值設定為空白即可。
   
  範例解說:
   先模擬一個狀況如下圖:
 
   
 
01:
02:
03:
04:
05:
06:
07:
<?php
setcookie ("a", "123", time()+1800);
setcookie ("b", "456", time()+1800);
setcookie ("c", "789", time()+1800);

echo '<a href="ch7-3-2.php">查詢Cookies</a>';
?>

ch7-3-1.php

執行結果>>

第01、02、03行:各註冊一個cookie變數及值,存活時間均設為1800秒(約30分鐘)

time( )函數是取得現在時間的unix時間格式。
 
01:
02:
03:
04:
05:
06:
07:
<?php
echo "<br> a ->".$a;
echo "<br> b ->".$_COOKIE["b"];
echo "<br> c ->".$HTTP_COOKIE_VARS["c"];

echo '<br /> <a href="ch7-3-1.php">重新建立Cookies</a>';
echo '<br /> <a href="ch7-3-3.php">刪除Cookies</a>';
?>

ch7-3-2.php

執行結果>>

第01、02、03行:各用不同取值的方法;如果第02行的值沒出現,表示 php.ini 的「register_globals」設為 off。

 
 
01:
02:
03:
04:
05:
06:
07:
<?php
setcookie ("a", "");
setcookie ("b", "", time()-1800);
setcookie ("c", "", time()-1800);

echo '<a href="ch7-3-2.php">查詢Cookies</a>';
?>

ch7-3-3.php

執行結果>>

第01行:讓 $a 被清除

第02、03行:連存活時間都倒扣,使cookie過期失效
ps.如果cookie的內容都被清除,連cookie的暫存檔都會一併刪除。
   
 

 此外,cookie的應用一定要使用者的瀏覽器能接受 cookie 的存取,有些人會因為安全的理由將cookie關掉,所以檢查使用者有沒接受 cookie 的存取是使用前必要的工作,而這項檢查功能要如何做到呢?其實很簡單,就在cookie正式使用前來個「模擬測試」,就是先送出一個測試的 cookie ,再檢查這個cookie值是否存在,如果不存在,則表示cookie沒開,如果存在,則表示有開,並順手將測試的cookie刪除 ;實際範例如下:

 
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
<?php
setcookie ("testcookie", "test123", time() + 1800);

if ( $testcookie == "test123" ) {
setcookie ("testcookie" );
echo "使用者瀏覽器接受 cookie !!";
} else {
echo "注意!使用者瀏覽器不接受 cookie !!";
}
?>

ch7-3-4.php

執行結果>>

第02行:送出一個cookie

第04~09行:檢查 cookie的值是否存在;如果存在,則清除 cookie,否則告知cookie未開。
 
   
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 James Wu 的頭像
    James Wu

    James's Privacy Corner

    James Wu 發表在 痞客邦 留言(0) 人氣()