首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP Cookie 完整入門指南:設定、讀取與刪除實作

     編輯:PHP 相關知識

什麼是 Cookie?

Cookie 是伺服器儲存在用戶瀏覽器端的小型資料片段,常用於記錄登入狀態、偏好設定、購物車內容等。PHP 透過 setcookie() 函數發送 Cookie,瀏覽器會在後續請求中自動攜帶,伺服器端可透過 $_COOKIE 超全域變數讀取。

設定 Cookie

// 語法:setcookie(名稱, 值, 過期時間, 路徑, 網域, 安全, HttpOnly)
$cookieName = "user_pref";
$cookieValue = "dark_mode";
$expireTime = time() + (3600 * 24 * 30); // 30 天後過期

setcookie($cookieName, $cookieValue, $expireTime, "/"); // 路徑設為根目錄,全站可用

關鍵參數說明:

  • 過期時間:Unix 時間戳。省略或設 0 表示瀏覽器關閉即失效(Session Cookie)。
  • 路徑:建議設為 "/",否則僅在設定路徑及其子目錄生效。
  • HttpOnly:建議啟用(PHP 5.2+ 可在第 7 參數設 true),防止 JavaScript 存取,降低 XSS 風險。

讀取 Cookie

if (isset($_COOKIE["user_pref"])) {
    echo "目前偏好:" . htmlspecialchars($_COOKIE["user_pref"]);
} else {
    echo "尚未設定偏好 Cookie";
}

務必使用 isset() 檢查是否存在,並配合 htmlspecialchars() 防止 XSS 攻擊。

刪除 Cookie

刪除的本質是將過期時間設為過去:

setcookie("user_pref", "", time() - 3600, "/"); // 1 小時前過期,瀏覽器將刪除

或直接呼叫不帶值的 setcookie("user_pref");(部分 PHP 版本支援)。

替代方案:使用 header() 手動發送

header("Set-Cookie: user_pref=dark_mode; expires=" . gmdate("D, d-M-Y H:i:s T", $expireTime) . "; path=/; HttpOnly");

此方式較底層,需自行組合符合 RFC 6265 的標頭字串,除非特殊需求,建議優先使用 setcookie()。

常見陷阱與最佳實踐

  • 輸出前設定:setcookie() 必須在任何 HTML 輸出、echo、空白字元之前呼叫,否則會觸發「Headers already sent」警告並失效。
  • 大小限制:單一 Cookie 不超過 4KB,單一網域總數約 20-50 個,勿濫用儲存大量資料。
  • 敏感資料:切勿在 Cookie 儲存密碼、Token 等敏感資訊,應改用 Session 或加密儲存。
  • SameSite 屬性:PHP 7.3+ 可在第 7 參數傳入 ['samesite' => 'Lax'] 陣列,強化 CSRF 防護。

總結

Cookie 是 HTTP 無狀態特性下維持狀態的基礎機制。掌握 setcookie() 參數細節、讀取時的安全過濾、刪除的正確姿勢,並遵循「最小權限、最小範圍、最短壽命」原則,即能安全有效地在 PHP 專案中應用 Cookie。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved