轉錄自 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( )函數時,得先注意下列事項:
-
- 與session_start( )函數的狀況一樣,在使用setcookie(
)函數時,之前都不可以有任何的結果輸出,例如不可以在setcookie( )之前使用echo 輸出變數或將setcookie
( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。
- 如果 php.ini 的「register_globals」設為 on,只要在cookie有效期限用,可以直接使用
$變數輸出變數的內容,但如果設成 off ,則需要用
$_COOKIE["名稱"] 或 $HTTP_COOKIE_VARS["名稱"]
方式取得內容。
- 如果沒有設定留存時間,雖然有指定cookie名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的
Cookie。
- 如果要刪除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>'; ?>
|
|
第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>'; ?>
|
|
第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>'; ?>
|
|
第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 !!"; } ?>
|
|
第02行:送出一個cookie
|
第04~09行:檢查 cookie的值是否存在;如果存在,則清除
cookie,否則告知cookie未開。 |
|
|
|
|
|