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

ThinkPHP 3.x Cookie 操作完全指南:設置、獲取、刪除與進階配置

     編輯:PHP 綜合知識

函數簽名

cookie($name, $value = '', $option = null)

ThinkPHP 封裝原生 setcookie() 與 $_COOKIE,提供統一介面處理設置、讀取、刪除,支援陣列值、JSON 編碼、前綴、過期時間、路徑、域名等完整選項。

一、Cookie 設置

基本用法

cookie('name', 'value');              // 預設過期時間 (COOKIE_EXPIRE)
cookie('name', 'value', 3600);        // 指定秒數過期

陣列值支援 (v3.1+)

自動 JSON 編碼/解碼,節省空間:

cookie('user', ['id' => 1, 'name' => 'admin', 'role' => 2]);

完整參數陣列

cookie('name', 'value', [
    'expire' => 3600,        // 有效期(秒)
    'prefix' => 'think_',    // 前綴,預覽 COOKIE_PREFIX
    'path' => '/',           // 路徑,預覽 COOKIE_PATH
    'domain' => '.example.com' // 域名,預覽 COOKIE_DOMAIN
]);

查詢字串格式 (等效)

cookie('name', 'value', 'expire=3600&prefix=think_');

部分參數會與配置檔預設值合併,無需全部指定。

二、Cookie 獲取

$value = cookie('name');

內部自動處理前綴:

  • 無前綴:$_COOKIE['name']
  • 有前綴 think_:$_COOKIE['think_name']

若值為 JSON 陣列,自動解碼回 PHP 陣列。

三、Cookie 刪除

cookie('name', null);              // 刪除單一
cookie(null);                      // 清空當前前綴所有 Cookie
cookie(null, 'think_');            // 清空指定前綴所有 Cookie

四、配置參數說明 (config.php)

'COOKIE_PREFIX' => 'think_',   // 前綴,避免衝突
'COOKIE_EXPIRE' => 3600,       // 預設過期秒數
'COOKIE_PATH' => '/',          // 作用路徑
'COOKIE_DOMAIN' => '',         // 作用域名,跨子域設為 '.example.com'
'COOKIE_SECURE' => false,      // 僅 HTTPS 傳輸
'COOKIE_HTTPONLY' => true,     // 阻止 JS 讀取,防 XSS

五、實務最佳實踐

1. 登入狀態管理

// 登入成功
cookie('user_auth', ['uid' => $uid, 'token' => $token], 86400 * 7); // 7 天

// 權限檢查中介層
$user = cookie('user_auth');
if (!$user || !validate_token($user['uid'], $user['token'])) {
    redirect('login');
}

2. 記住我 (長期登入)

if ($remember) {
    cookie('remember_me', encrypt($uid . '|' . $token), 86400 * 30);
} else {
    cookie('remember_me', null); // 刪除
}

3. 跨子域共享 (SSO 基礎)

// 主域 .example.com 所有子域可讀
cookie('sso_token', $token, ['domain' => '.example.com', 'path' => '/']);

// 子域登出需同步清除
cookie('sso_token', null, ['domain' => '.example.com', 'path' => '/'])

4. 安全加固

  • 敏感 Cookie 必開 HTTPONLY、SECURE (HTTPS 環境)。
  • Token 簽名驗證 (HMAC),防止偽造。
  • 定期輪換 Token,限制單裝置/單 Session。

六、常見問題排查

現象可能原因解決
設置後立即讀取為空Cookie 隨 HTTP 響應發送,下一次請求才可讀重定向或下一請求讀取
跨子域無法讀取Domain 未設為主域設 COOKIE_DOMAIN => '.example.com'
中文亂碼未 URL 編碼ThinkPHP 內建處理,若手動 setcookie 需 urlencode
刪除不生效Path/Domain 不一致刪除時必須與設置時完全相同的 Path/Domain

總結

ThinkPHP cookie() 以單一函數涵蓋完整生命週期,支援陣列、前綴、多域配置,開箱即用。實務上建議:統一前綴、敏感資料加密簽名、善用 HTTPONLY/SECURE、跨域場景正確設定 Domain/Path,構建安全可靠的狀態管理體系。

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