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

PHP setcookie() 完整指南:設定、讀取、刪除與進階應用

     編輯:PHP 相關知識

基本語法

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)

常見操作範例

設定 Cookie

<?php
// 必須在任何輸出之前呼叫
setcookie('user_name', 'JohnDoe', time() + 3600, '/', '.example.com', true, true);
// 1 小時後過期、全站有效、含子域名、僅 HTTPS、HttpOnly
?>

讀取 Cookie

<?php
if (isset($_COOKIE['user_name'])) {
    echo '歡迎,' . htmlspecialchars($_COOKIE['user_name']);
} else {
    echo '訪客您好';
}

刪除 Cookie

將過期時間設為過去:

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');

陣列型 Cookie

setcookie('prefs[theme]', 'dark');
setcookie('prefs[lang]', 'zh-TW');

// 讀取
if (isset($_COOKIE['prefs'])) {
    foreach ($_COOKIE['prefs'] as $key => $val) {
        echo "$key: $val<br>";
    }
}

JavaScript 操作 Cookie(輔助)

// 設定
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);
}

注意事項

  1. 必須在輸出前呼叫:任何 echo、HTML 空白、BOM 都會導致 headers already sent 警告。
  2. 大小限制:單一 Cookie 約 4KB,總數受瀏覽器限制(約 50-300 個/域名)。
  3. 安全性:敏感資料勿存 Cookie,建議啟用 httponly、secure、SameSite(PHP 7.3+ 支援 setcookie(..., ['samesite' => 'Lax']))。

結語

Cookie 是 HTTP 無狀態特性的補救機制,正確設定路徑、域名、安全旗標,並配合 Session 使用,能構建安全可靠的用戶狀態管理。

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