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:生效域名,.example.com 含子域名secure:僅 HTTPS 傳輸httponly:禁止 JavaScript 存取(防 XSS)<?php
// 必須在任何輸出之前呼叫
setcookie('user_name', 'JohnDoe', time() + 3600, '/', '.example.com', true, true);
// 1 小時後過期、全站有效、含子域名、僅 HTTPS、HttpOnly
?>
<?php
if (isset($_COOKIE['user_name'])) {
echo '歡迎,' . htmlspecialchars($_COOKIE['user_name']);
} else {
echo '訪客您好';
}
將過期時間設為過去:
setcookie('user_name', '', time() - 3600, '/', '.example.com');
function set_cookie_live($name, $value = '', $expire = 0, $path = '/', $domain = '', $secure = false, $httponly = true) {
// 立即在 $_COOKIE 可用,解決「設定後當下無法讀取」問題
$_COOKIE[$name] = $value;
return setcookie($name, $value, $expire ? time() + $expire : 0, $path, $domain, $secure, $httponly);
}
// 使用:86000 秒 = 1 天
set_cookie_live('token', 'abc123', 86000, '/', '.example.com');
setcookie('prefs[theme]', 'dark');
setcookie('prefs[lang]', 'zh-TW');
// 讀取
if (isset($_COOKIE['prefs'])) {
foreach ($_COOKIE['prefs'] as $key => $val) {
echo "$key: $val<br>";
}
}
// 設定
function setCookie(name, value, days) {
const expires = days ? `; expires=${new Date(Date.now() + days*864e5).toUTCString()}` : '';
document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;
}
// 讀取
function getCookie(name) {
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
return match ? decodeURIComponent(match[2]) : null;
}
// 刪除
function deleteCookie(name) {
setCookie(name, '', -1);
}
echo、HTML 空白、BOM 都會導致 headers already sent 警告。httponly、secure、SameSite(PHP 7.3+ 支援 setcookie(..., ['samesite' => 'Lax']))。Cookie 是 HTTP 無狀態特性的補救機制,正確設定路徑、域名、安全旗標,並配合 Session 使用,能構建安全可靠的用戶狀態管理。