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

PHP setcookie() 函式完整參數說明與實戰用法

     編輯:PHP 綜合知識

setcookie() 是 PHP 設定 Cookie 的核心函式,必須在任何輸出之前呼叫(含空白字元、BOM)。掌握六個參數用法,才能精準控制 Cookie 生命週期、作用域與安全性。

函式簽名

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

注意:PHP 7.3+ 新增 $options 陣列寫法,建議新專案改用關聯陣列語法:

setcookie('webURL', 'www.example.com', [
    'expires'  => time() + 86400,
    'path'     => '/',
    'domain'   => '.example.com',
    'secure'   => true,
    'httponly' => true,
    'samesite' => 'Lax',
]);

六大參數詳細對照表

參數必要性說明範例值
name必填Cookie 名稱,勿包含分號、逗號、空白、等號user_id
value必填Cookie 值,自動 urlencode,取時自動 urldecode12345
expire選填Unix 時間戳,0 或省略 = 瀏覽器關閉即失效(Session Cookie)time() + 3600*24(1 天)
path選填Cookie 生效路徑,/ 表全站,/admin/ 僅後台/
domain選填生效域名,.example.com 含所有子域,example.com 僅主域.example.com
secure選填true 僅 HTTPS 傳輸,生產環境務必開啟true
httponly選填true 禁止 JavaScript 存取,防禦 XSS 竊取 Cookietrue
samesite選填PHP 7.3+,Lax / Strict / None,CSRF 防護關鍵Lax

常見實戰場景

1. 設定 30 天免登入(記住我)

setcookie('remember_token', $token, [
    'expires'  => time() + 86400 * 30,
    'path'     => '/',
    'domain'   => '.mysite.com',
    'secure'   => true,
    'httponly' => true,
    'samesite' => 'Lax',
]);

2. 僅限後台路徑的管理員 Session

setcookie('admin_sid', $sid, [
    'expires'  => 0,              // 關閉瀏覽器即失效
    'path'     => '/admin/',
    'secure'   => true,
    'httponly' => true,
]);

3. 刪除 Cookie(設定過去時間)

setcookie('user_pref', '', [
    'expires'  => time() - 3600,
    'path'     => '/',
    'domain'   => '.mysite.com',
]);

避坑指南

  • 輸出前呼叫:任何 echo、HTML、空白行、BOM 都會導致 Headers already sent 警告。
  • 域名寫法:.example.com(前置點)可共享給 www.example.com、api.example.com;不加點則僅限精確匹配。
  • Secure + SameSite:若 SameSite=None 則 必須 Secure=true,否則瀏覽器會拒絕設定。
  • 子目錄 Path 陷阱:path=/app 時,/app/ 及 /app/sub 可讀,但 /apple 也會匹配(前綴匹配),建議以 / 結尾。

快速驗證

<?php
// 設定
setcookie('test', 'hello', time()+3600, '/');
// 讀取
var_dump($_COOKIE['test'] ?? '未設定');
?>

掌握參數細節,Cookie 管理才能既安全又靈活。

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