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

PHP Cookie 完整操作指南:建立、讀取、路徑、有效期與刪除實務

     編輯:PHP 綜合知識

Cookie 基本認知

Cookie 是伺服器儲存在客戶端的小型文字檔,用於識別用戶、保存偏好設定、實現「記住我」等功能。與 Session 儲存在伺服器端不同,Cookie 由瀏覽器自動攜帶於每次 HTTP 請求中。

建立 Cookie:setcookie()

bool setcookie(
    string $name,
    string $value = "",
    int $expire = 0,
    string $path = "",
    string $domain = "",
    bool $secure = false,
    bool $httponly = false
)
參數說明
name必要,Cookie 名稱
value值,留空或設為空字串可刪除 Cookie
expireUnix 時間戳,0 或省略 = 瀏覽器關閉失效(Session Cookie)
path生效路徑,預設 /(全站),設為 /admin 僅限該路徑及子路徑
domain生效域名,預設當前域名,可設 .example.com 共享子域名
securetrue 表示僅 HTTPS 傳輸
httponlytrue 禁止 JavaScript 存取,緩解 XSS

實作範例

基本建立

setcookie("lang", "zh-TW"); // Session Cookie,關閉瀏覽器失效

設定有效期

// 1 小時後過期
setcookie("token", "abc123", time() + 3600);
// 1 天後過期
setcookie("remember", "yes", time() + 86400);
// 指定日期過期(2025-12-31 23:59:59)
setcookie("promo", "2025", mktime(23, 59, 59, 12, 31, 2025));

路徑與域名控制

// 僅 /admin 路徑可存取
setcookie("admin_pref", "dark", 0, "/admin");
// 共享所有子域名
setcookie("session_id", "xyz", time()+3600, "/", ".example.com");

安全屬性

// 僅 HTTPS + 禁止 JS 存取
setcookie("secure_token", "secret", [
    'expires' => time() + 3600,
    'path' => '/',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict' // PHP 7.3+ 支援
]);

讀取 Cookie

// 必須在「下一次請求」才能讀到剛設定的值
if (isset($_COOKIE['lang'])) {
    echo "語言偏好:" . htmlspecialchars($_COOKIE['lang']);
}

注意:setcookie() 後同請求內 $_COOKIE 不會立即更新,需重新整理或導向才能讀取。

刪除 Cookie

// 設定過期時間為過去
setcookie("token", "", time() - 3600);
// 或明確指定路徑/域名與建立時一致
setcookie("admin_pref", "", time() - 3600, "/admin");

切勿使用 unset($_COOKIE['name']),這只刪除當前陣列元素,不會通知瀏覽器移除。

常見坑與最佳實務

  • 輸出前呼叫:setcookie() 屬標頭操作,必須在任何 echo, print, HTML 空白之前執行,否則觸發 Headers already sent 警告。
  • 值只能是純量:陣列、物件需自行 json_encode() / serialize()。
  • 大小限制:單一 Cookie 約 4KB,數量每域名約 20-50 個,勿濫用。
  • 敏感資料加密:不要直接存放用戶 ID、權限等,應簽名或加密(如 Laravel encrypt())。
  • SameSite 屬性:PHP 7.3+ 可在選項陣列傳 'samesite' => 'Lax' 防禦 CSRF。

Cookie vs Session 快速比較

特性CookieSession
儲存位置客戶端瀏覽器伺服器端(檔案/Redis/DB)
容量~4KB較大(受伺服器設定限制)
安全性可被竄改、側錄較高,僅傳遞 Session ID
生命週期可設定持久化通常瀏覽器關閉失效
典型用途偏好設定、記住登入、追蹤用戶狀態、購物車、權限驗證

掌握 Cookie 完整生命週期控制,是打造個性化、安全 Web 體驗的基石。

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