PHP Cookies

在本教程中,你將學習如何使用 PHP cookie 在使用者的瀏覽器中儲存少量資訊。

Cookie 是一個小文字檔案,允許你在使用者的計算機上儲存少量資料(近 4KB)。它們通常用於跟蹤資訊,例如網站可以檢索的使用者名稱,以便在使用者下次訪問網站時對頁面進行個性化。

提示: 每次瀏覽器向伺服器請求頁面時,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 中,因為它可能會被惡意使用者操縱。要安全地儲存敏感資料,請使用會話

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 關聯陣列的結構。

你可以通過 setcookie() 使用 cookie 名稱和任何值(例如空字串) 呼叫相同的函式來刪除 cookie,但是這次你需要設定過去的過期日期,如下例所示:

<?php
// Deleting a cookie
setcookie("username", "", time()-3600);
?>

提示: 你應該傳遞完全相同的路徑,域和你在第一次建立 cookie 時使用的其他引數,以確保刪除正確的 cookie。