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

PHP Cookie 運作原理與讀寫刪除完整指南

     編輯:PHP 相關知識

Cookie 是什麼?

Cookie 是伺服器儲存在使用者瀏覽器端的小型文字資料(通常 ≤ 4KB)。每次瀏覽器向同一網域發送請求時,會自動攜帶該網域下的所有 Cookie,讓無狀態的 HTTP 協定得以實現「狀態管理」——例如記住登入狀態、購物車內容、偏好設定等。

運作流程

  1. 設定:PHP 執行 setcookie(),在 HTTP 回應標頭中加入 Set-Cookie。
  2. 儲存:瀏覽器收到標頭,將 Cookie 寫入本地儲存(早期為文字檔,現代瀏覽器多用 SQLite 資料庫)。
  3. 送出:後續請求自動在 Cookie 標頭中帶上符合條件(網域、路徑、未過期、Secure/HttpOnly 等)的 Cookie。
  4. 讀取:PHP 自動解析 Cookie 標頭,填入 $_COOKIE 超全域陣列。

核心函式:setcookie() 完整簽名

setcookie(
    string $name,
    string $value = '',
    int $expires_or_options = 0,
    string $path = '',
    string $domain = '',
    bool $secure = false,
    bool $httponly = false
): bool

常用參數:

  • $name:Cookie 名稱(鍵名)
  • $value:儲存值(純字串,建議 json_encode() 序列化複雜結構)
  • $expires:Unix 時間戳;0 或省略 = 瀏覽器關閉即失效(Session Cookie);負值 = 立即刪除
  • $path:生效路徑,預設為當前腳本目錄,建議設為 / 全站有效
  • $domain:生效網域,預設為當前主機,可設 .example.com 共享給子網域
  • $secure:僅 HTTPS 傳輸
  • $httponly:禁止 JavaScript 存取(防 XSS),強烈建議開啟

實戰範例

1. 基本寫入(有效期 7 天)

$value = 'the best way is by yourself';
setcookie('cookiename', $value, time() + 60*60*24*7, '/', '', false, true);

2. 讀取

if (isset($_COOKIE['cookiename'])) {
    echo $_COOKIE['cookiename'];  // 輸出:the best way is by yourself
}

3. Cookie 陣列寫法(兩種皆可)

// 寫法一:數字索引
setcookie('CookieArray[0]', 'Value1');
setcookie('CookieArray[1]', 'Value2');

// 寫法二:關聯索引
setcookie("CookieArray['one']", 'Value1');
setcookie("CookieArray['two']", 'Value2');

// 讀取時 $_COOKIE['CookieArray'] 即為陣列

4. 刪除 Cookie

// 方法一:只傳 name,或將 expires 設為過去時間
setcookie('MyCookie', '', time() - 3600, '/');  // 建議保留 path/domain 一致

// 方法二:PHP 7.3+ 可用選項陣列
setcookie('MyCookie', '', ['expires' => time() - 3600, 'path' => '/']);

// 注意:刪除後當前請求的 $_COOKIE 仍保留值,需重新整理才消失

5. Session Cookie(瀏覽器關閉即失效)

setcookie('session_flag', '1', 0, '/');  // expires=0

常見坑與最佳實務

問題原因解決
setcookie() 無效輸出內容前已有空白、HTML、BOM、echo確保 setcookie() 在任何輸出之前;或開啟 output_buffering
當前頁面讀不到剛寫入的 Cookie$_COOKIE 只反映「請求時」的 Cookie重新導向或重新整理頁面
子目錄讀不到根目錄設的 Cookie預設 path 為當前目錄明確設定 path=/
用戶禁用 Cookie瀏覽器設定、隱私模式備援方案:Session ID 放 URL、LocalStorage、指紋識別
中文亂碼Cookie 值只支援 ASCIIurlencode() 寫入,urldecode() 讀取,或 base64_encode()

限制總覽

  • 單一 Cookie ≤ 4KB
  • 單一網域 ≤ 20~50 個(視瀏覽器)
  • 總數 ≤ 300 個
  • 必須遵守同源政策

總結

Cookie 是客戶端狀態管理的基石。掌握 setcookie() 七個參數、理解「請求/回應」週期、養成 HttpOnly、Secure、path=/ 的安全習慣,並預備無 Cookie 環境的降級策略,才能建立健壯的 Web 應用。

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