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

PHP Cookie 完整指南:設定、讀取與進階應用

     編輯:PHP 綜合知識

前言

在 PHP 中操作 Cookie 是一項基礎且實用的技能。雖然我們不盲目推崇 Cookie,但它確實是解決特定問題(如跨頁面狀態保持)的關鍵工具。本文將系統介紹如何使用 setcookie() 函數建立、修改、刪除 Cookie,並說明其參數細節與常見陷阱。

基本 Cookie 建立

最簡單的設定方式只需提供名稱與值:

<?php
setcookie('name', 'bret');
?>

此 Cookie 為「Session Cookie」,生命週期隨瀏覽器關閉而結束。在用戶會話期間,所有同域頁面皆可透過 $_COOKIE['name'] 讀取其值。

設定過期時間:持久化 Cookie

若需在瀏覽器關閉後保留 Cookie,必須傳入第三個參數——過期時間戳(Unix Timestamp,即從 1970-01-01 起的秒數)。PHP 提供 mktime() 協助轉換:

<?php
$expire = mktime(0, 0, 0, 1, 1, 2000); // 2000-01-01 00:00:00
setcookie('name', 'bret', $expire);
?>

此 Cookie 將在 2000 年到期。注意:時間戳必須為整數秒數。

更新與同步變數值

更新 Cookie 只需再次呼叫 setcookie() 覆蓋舊值:

<?php
$expire = mktime(0, 0, 0, 1, 1, 2000);
setcookie('name', 'jeff', $expire);
?>

重要:此時目前頁面的 $name 變數不會自動更新,因為 Cookie 值在頁面載入時已確定。若需同步,請先設定變數再寫入 Cookie:

<?php
$name = 'jeff';
$expire = mktime(0, 0, 0, 1, 1, 2000);
setcookie('name', $name, $expire);
?>

路徑與域名控制(第 4、5 參數)

預設僅允許設定 Cookie 的伺服器同域、同目錄下的頁面讀取。若需跨子域或特定目錄存取,可指定路徑與域名:

<?php
$expire = mktime(0, 0, 0, 1, 1, 2000);
setcookie('name', 'jeff', $expire, '~/myhome', '.domain.com');
?>
  • 第 4 參數:路徑(如 / 表示全站)
  • 第 5 參數:域名(以 . 開頭可包含所有子域)

安全傳輸(第 6 參數)

將第 6 參數設為 1(或 true),Cookie 僅會在 HTTPS 連線下傳送,增強安全性:

setcookie('name', 'value', $expire, '/', '.domain.com', 1);

刪除 Cookie

只需傳入名稱,不帶值或將過期時間設為過去:

<?php
setcookie('name'); // 或 setcookie('name', '', time()-3600);
?>

關鍵限制:輸出前設定

Cookie 屬於 HTTP Header,必須在任何輸出(HTML、空白、echo)之前送出,否則會觸發警告且 Cookie 失效。

正確範例:

<?php
setcookie('name', 'jeff');
echo "Hello Everyone!";
?>

錯誤範例: 先輸出內容再設定 Cookie

<?php
echo "Some output...";
setcookie('name', 'jeff'); // 警告:Header already sent
?>

總結

掌握 setcookie() 的六個參數與「輸出前設定」原則,即可靈活運用 Cookie 實現跨頁面狀態管理、記住登入狀態、追蹤用戶偏好等功能。實務上建議搭配 Session 機制使用,兼顧安全與便利性。

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