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

PHP Cookie 完整指南:設定、接收、刪除、路徑域限制、安全屬性與實戰範例

     編輯:PHP 綜合知識

一、設定 Cookie - setcookie()

bool setcookie(string $name, string $value = "", int $expire = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false)

設定範例

<?php
setcookie("mycookie", "value_of_mycookie");                    // 簡單
setcookie("withExpire", "Expire_in_1_hour", time()+3600);      // 帶過期
setcookie("FullCookie", "value", time()+3600, "/forum", "www.123.com", true, true); // 完整參數
?>

二、重要特性與注意事項

  1. 設定順序:同頁面多個 setcookie 按「後蓋前」生效,刪除後重設需先寫入再刪除代碼順序
  2. 路徑隔離:/admin/ 設定的 Cookie 在 /public/ 不可見
  3. 輸出前設定:必須在任何 HTML/空白輸出前呼叫
  4. 瀏覽器限制:單域名約 150-180 個、單 Cookie 4KB、用戶可禁用

三、接收與處理

PHP 自動解析至 $_COOKIE 超全域陣列:

<?php
echo $_COOKIE['mycookie'];           // 直接讀取
echo $HTTP_COOKIE_VARS['mycookie'];  // 舊式寫法 (PHP 5.4+ 移除)
echo count($_COOKIE);                // Cookie 總數
?>

四、刪除 Cookie

<?php
// 方法 1:僅帶 name
setcookie("mycookie");

// 方法 2:過期時間設為過去
setcookie("mycookie", "", time()-1);
// 或
setcookie("mycookie", "", time()-3600);
?>

五、完整實戰範例

<?php
// cookie.php
if (!isset($_GET['flag'])) {
    setcookie("mycookie", "this my cookie!");
    header("Location: cookie.php?flag=1"); // 重導向觸發瀏覽器攜帶 Cookie
    exit;
}
?>
<html><body>
<?php echo "Cookie 值: " . $_COOKIE['mycookie']; ?>
</body></html>

六、安全最佳實踐

參數說明範例
nameCookie 名稱 (必填)"user_id"
value儲存值"12345"
expireUnix 時間戳過期時間,0=會話結束time()+3600 (1小時)
path生效路徑,預設當前目錄"/" (全站)
domain生效域名,預設當前主機".example.com" (含子域)
secure僅 HTTPS 傳輸true
httponlyJS 無法讀取 (防 XSS)true
風險防護措施
XSS 竊取 Cookie啟用 httponly=true,內容安全策略 (CSP)
中間人竊聽全站 HTTPS + secure=true + HSTS
CSRF 攻擊SameSite=Lax/Strict (PHP 7.3+ setcookie(..., ['samesite'=>'Lax']))
Session 劫持Session ID 定期重生成、IP/UA 綁定檢查

七、現代框架封裝 (Laravel/Symfony 風格)

<?php
// 設定
Cookie::queue('name', 'value', 60); // 隊列化,響應階段寫入
Cookie::forever('remember_token', $token); // 5 年過期

// 讀取
$value = Cookie::get('name');
$value = request()->cookie('name');

// 刪除
Cookie::forget('name');
Cookie::expire('name');
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved