PHP Cookies
在本教程中,你將學習如何使用 PHP cookie 在使用者的瀏覽器中儲存少量資訊。
什麼是 Cookie
Cookie 是一個小文字檔案,允許你在使用者的計算機上儲存少量資料(近 4KB)。它們通常用於跟蹤資訊,例如網站可以檢索的使用者名稱,以便在使用者下次訪問網站時對頁面進行個性化。
提示: 每次瀏覽器向伺服器請求頁面時,cookie 中的所有資料都會自動傳送到請求中的伺服器。
在 PHP 中設定 Cookie
setcookie()
函式用於在 PHP 中設定 cookie。確保 setcookie()
在指令碼生成任何輸出之前呼叫該函式,否則不會設定 cookie。該函式的基本語法如下:
setcookie(name, value, expire, path, domain, secure);
setcookie()
函式的引數具有以下含義:
引數 | 描述 |
---|---|
name |
cookie 的名稱。 |
value |
cookie 的價值。不儲存敏感資訊,因為此值儲存在使用者的計算機上。 |
expires |
UNIX 時間戳格式的到期日期。在此之後,cookie 將無法訪問。預設值為 0。 |
path |
指定 cookie 可用的伺服器上的路徑。如果設定為 / ,則 cookie 將在整個域中可用。 |
domain |
指定 cookie 可用於的域,例如 www.example.com。 |
secure |
此欄位(如果存在)表示僅在存在安全 HTTPS 連線時才應傳送 cookie。 |
提示: 如果 cookie 的過期時間設定為 0 或省略,則 cookie 將在會話結束時過期,即瀏覽器關閉時。
這是一個使用 setcookie()
函式建立一個名為 username
的 cookie,併為其賦值為 John Carter
的示例。它還指定 cookie 將在 30 天后過期(30 days * 24 hours * 60 min * 60 sec
)。
<?php
// Setting a cookie
setcookie("username", "John Carter", time()+30*24*60*60);
?>
注意: 除名稱外的所有引數都是可選的。你也可以使用空字串(""
)替換引數以跳過該引數,但是要跳過 expire
引數需要使用零(0),因為它是一個整數。
警告: 不要將敏感資料儲存在 cookie 中,因為它可能會被惡意使用者操縱。要安全地儲存敏感資料,請使用會話。
訪問 Cookie 值
PHP $_COOKIE
超全域性變數用於檢索 cookie 值。它通常是一個關聯陣列,其中包含瀏覽器在當前請求中傳送的所有 cookie 值的列表,由 cookie 名稱鍵入。可以使用標準陣列表示法訪問單個 cookie 值,例如,為了顯示上一個示例中設定的使用者名稱 cookie,你可以使用以下程式碼。
<?php
// Accessing an individual cookie value
echo $_COOKIE["username"];
?>
上例中的 PHP 程式碼生成以下輸出。
John Carter
在訪問 cookie 之前檢查 cookie 是否設定是一個好習慣。為此,你可以使用 PHP isset()
函式,如下所示:
<?php
// Verifying whether a cookie is set or not
if(isset($_COOKIE["username"])){
echo "Hi " . $_COOKIE["username"];
} else{
echo "Welcome Guest!";
}
?>
你可以像使用其他陣列一樣使用 print_r()
函式,如 print_r($_COOKIE);
來檢視此 $_COOKIE
關聯陣列的結構。
刪除 Cookie
你可以通過 setcookie()
使用 cookie 名稱和任何值(例如空字串) 呼叫相同的函式來刪除 cookie,但是這次你需要設定過去的過期日期,如下例所示:
<?php
// Deleting a cookie
setcookie("username", "", time()-3600);
?>
提示: 你應該傳遞完全相同的路徑,域和你在第一次建立 cookie 時使用的其他引數,以確保刪除正確的 cookie。