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

PHP 使用 Header 發送 Cookie 的完整實作指南

     編輯:PHP 綜合知識

前言

在 PHP 開發中,雖然 setcookie() 是最常用的設定 Cookie 函式,但有時候我們需要更底層的控制,或是需要在特定情境下手動組裝 HTTP 標頭。此時透過 header() 函式直接發送 Set-Cookie 標頭便是一個實用的替代方案。

基本語法與參數解析

以下是一個標準的範例程式碼:

<?php
header("Set-Cookie: testcookie=中文; path=/; domain=.phpv.net; expires=" . gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT", time() + 9600));
?>

關鍵參數說明:

  • testcookie=中文:Cookie 名稱與值,支援中文(建議搭配 urlencode() 編碼以確保相容性)。
  • path=/:Cookie 生效路徑,設為根目錄表示全站可存取。
  • domain=.phpv.net:生效域名,前綴點號表示包含所有子域名(請替換為您的實際域名)。
  • expires:過期時間,採用 GMT 格式。範例中使用 gmstrftime() 產生符合 RFC 1123 標準的時間字串,time() + 9600 表示 2.67 小時後過期。

實務注意事項

1. 必須在輸出前呼叫

header() 必須在任何 HTML 輸出、echo、空白字元之前執行,否則會觸發 Headers already sent 警告導致 Cookie 設定失敗。

2. 中文值的編碼處理

雖然現代瀏覽器大多支援 UTF-8 的 Cookie 值,但為了最大相容性,建議寫入時使用 urlencode(),讀取時用 urldecode() 還原:

<?php
$value = urlencode('中文內容');
header("Set-Cookie: mycookie={$value}; path=/; domain=.example.com; expires=" . gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT", time() + 3600));
?>

3. 安全性屬性補充

現代 Web 應用建議加入以下屬性提升安全性:

  • Secure:僅在 HTTPS 連線下傳送。
  • HttpOnly:防止 JavaScript 存取,降低 XSS 風險。
  • SameSite=Lax 或 Strict:防禦 CSRF 攻擊。
header("Set-Cookie: testcookie=value; path=/; domain=.example.com; Secure; HttpOnly; SameSite=Lax");

常見問題排查

問題可能原因解決方案
Cookie 未生效域名設定錯誤(如 localhost 無法設定 domain)本機測試時移除 domain 參數,或修改 hosts 檔案使用真實域名
中文顯示亂碼編碼不一致統一使用 urlencode()/urldecode(),確認檔案儲存為 UTF-8 無 BOM
過期時間不準伺服器時間與客戶端時區差異統一使用 GMT 時間,避免依賴本地時區

總結

雖然 setcookie() 封裝良好且易用,但掌握 header() 手動發送 Cookie 的技巧,能在需要精確控制標頭、避開框架限制、或是除錯網路請求時提供更大的彈性。記住核心原則:正確的參數格式、輸出前發送、妥善處理編碼與安全屬性。

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