伺服器留在客戶端的小型資料檔,用於識別用戶、儲存偏好。每次請求自動攜帶。
與 Session 差異:Cookie 存客戶端,Session 存伺服器端。
bool setcookie(
string $name,
string $value = "",
int $expire = 0,
string $path = "",
string $domain = "",
bool $secure = false,
bool $httponly = false
)
| 參數 | 說明 |
|---|---|
| name | 必填,Cookie 名稱 |
| value | 值,空字串表示刪除 |
| expire | Unix 時間戳過期時間,0 或省略 = 會話級(關閉瀏覽器失效) |
| path | 生效路徑,預設 "/" 全站 |
| domain | 生效域名,預設當前域 |
| secure | true 時僅 HTTPS 傳輸 |
| httponly | true 時 JavaScript 無法存取(防 XSS) |
// 簡單建立
setcookie("lang", "zh-TW");
// 1 小時後過期
setcookie("token", $token, time() + 3600);
// 指定路徑、域名、僅 HTTPS、HttpOnly
setcookie("session_id", $sid, time()+86400, "/", ".example.com", true, true);
// 必須在「其他頁面」或「重新整理後」才能讀到 echo $_COOKIE['lang']; // zh-TW // 安全讀取 $lang = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'en';
注意: setcookie() 後立即在同頁 $_COOKIE 取不到值,需下一次請求。
setcookie("c1", "A", time() + 3600); // 1 小時
setcookie("c2", "B", time() + 86400); // 1 天
setcookie("c3", "C", mktime(23,59,59,12,31,2025)); // 指定日期
setcookie("c4", "D"); // 會話級
setcookie('admin_token', $val, 0, '/admin'); // 僅 /admin 及子路徑傳送
// 根目錄不會攜帶此 Cookie,節省頻寬、提升安全
// 設定過去時間
setcookie("lang", "", time() - 3600);
// 若建立時指定 path/domain/secure/httponly,刪除時必須完全一致
setcookie("token", "", time()-3600, "/", ".example.com", true, true);
httponly=true、secure=true(HTTPS 站點)SameSite=Strict/Lax(PHP 7.3+ 支援 setcookie(..., ['samesite' => 'Lax']))