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

PHP Session 與 Cookie 完整操作指南:從入門到最佳實踐

     編輯:PHP 綜合知識

前言

Session 與 Cookie 是 Web 開發中維持用戶狀態的兩大核心機制。本文系統梳理 PHP 中兩者的操作方法、底層差異、安全考量與最佳實踐,適合初學者建立正確認知,也供進階開發者查漏補缺。

Session:伺服端狀態管理

核心機制

  • 用戶首次訪問 → PHP 生成唯一 session_id
  • session_id 儲存於客戶端 Cookie(預設名 PHPSESSID)
  • 會話資料儲存於伺服端(檔案/Redis/資料庫)
  • 後續請求攜帶 session_id,伺服端識別用戶並載入資料

啟動 Session

鐵律:session_start() 之前不能有任何輸出(含空白、BOM、HTML),否則拋出 headers already sent 錯誤。

設定與讀取 Session

 'Hello',
    'url' => 'https://example.com',
    'type' => 'website'
];
?>

刪除與銷毀 Session

// 刪除單個鍵
unset($_SESSION["name"]);

// 清空當前會話所有資料(保留 session_id)
$_SESSION = array();
// 或
session_unset();

// 徹底銷毀會話(含伺服端資料、session_id、客戶端 Cookie)
session_destroy();

// 完整銷毀流程(官方推薦)
session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
);
}
session_destroy();

Cookie:客戶端持久化儲存

核心機制

  • 伺服端透過 HTTP 標頭 Set-Cookie 寫入客戶端
  • 客戶端後續請求自動攜帶 Cookie 標頭
  • 適用於:記住登入、偏好設定、追蹤識別
  • 容量限制:單 Cookie ≤ 4KB,每域名 ≤ 20-50 個

設定 Cookie

讀取 Cookie

刪除 Cookie

Session vs Cookie 關鍵差異

維度SessionCookie
儲存位置伺服端客戶端
資料大小無實質限制≤ 4KB
安全性高(資料不暴露)低(可被竄改/竊取)
生命週期瀏覽器關閉或 gc_maxlifetime可設定長期有效
跨域支援需額外配置受同源策略限制

安全最佳實踐

  1. Session ID 重生成:登入後呼叫 session_regenerate_id(true) 防止 Session Fixation 攻擊
  2. Cookie 安全屬性:HTTPS 環境強制 Secure、HttpOnly、SameSite=Strict/Lax
  3. 敏感資料不存 Cookie:Token、權限、個資僅存 Session 或加密儲存
  4. Session 儲存器優化:高併發場景改用 Redis/Memcached(session.save_handler)
  5. 定期清理:設定合理 session.gc_maxlifetime 與 session.gc_probability

常見問題排查

  • Session 失效:檢查 session_start() 位置、Cookie 是否被瀏覽器阻擋、磁碟空間是否滿、session.save_path 權限
  • 跨子域共享 Session:設定 session.cookie_domain = ".example.com"
  • Cookie 讀不到:確認路徑、域名、Secure/HttpOnly 設定與請求協定一致

總結

Session 負責伺服端業務狀態,Cookie 負責客戶端識別與持久化偏好。理解兩者機制差異、正確配置安全屬性、選擇適合架構的儲存後端,是構建穩健 Web 應用的基石。

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