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

PHP Cookie 操作完整指南:設定、讀取與安全實務

     編輯: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

實用範例

<?php
// 1. 設定 Cookie(必須在任何輸出之前)
// 記住登入 30 天,全站可用,僅 HTTPS 傳輸,JS 無法讀取
setcookie('remember_token', $token, [
    'expires'  => time() + 30*24*3600,
    'path'     => '/',
    'domain'   => '', // 當前域名
    'secure'   => true,   // 僅 HTTPS
    'httponly' => true,   // 防 XSS 竊取
    'samesite' => 'Lax',  // CSRF 防護
]);

// 2. 讀取 Cookie
if (isset($_COOKIE['remember_token'])) {
    $token = $_COOKIE['remember_token'];
    // 驗證 token 有效性...
}

// 3. 刪除 Cookie(設定過期時間為過去)
setcookie('remember_token', '', [
    'expires' => time() - 3600,
    'path'    => '/',
    'secure'  => true,
    'httponly'=> true,
]);

// 4. 陣列式 Cookie(自動序列化)
setcookie('prefs[theme]', 'dark', time()+86400, '/');
setcookie('prefs[lang]', 'zh-TW', time()+86400, '/');
// 讀取:$_COOKIE['prefs'] => ['theme'=>'dark', 'lang'=>'zh-TW']
?>

常見陷阱與解決

問題原因解決
Cookie 設定失效在 setcookie() 前已有輸出(空白、BOM、echo)確保最頂端呼叫,或開啟 output_buffering
子域名共享Domain 設定錯誤設定 domain => '.example.com' (前綴點號)
HTTPS 環境無法讀取未設 secure => true正式環境必須啟用 Secure 標誌
JS 竊取 Cookie未設 HttpOnly永遠啟用 httponly => true

Session vs Cookie 選擇指南

  • Session:敏感資料(用戶 ID、權限、購物車)、伺服器端儲存、較安全
  • Cookie:非敏感偏好(語言、主題)、記住登入 Token、跨子域名共享

GDPR/隱私法合規提醒

  • 非必要 Cookie 需取得用戶明確同意
  • 提供 Cookie 政策頁面與拒絕機制
  • 追蹤類 Cookie 設定較短過期時間
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved