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

PHP Session 會話處理完整指南:啟動、存取、銷毀與安全配置

     編輯:PHP 綜合知識

Session 運作原理

    1. session_start() 建立/恢復會話 2. 產生唯一 Session ID(預設 PHPSESSID) 3. ID 透過 Cookie 或 URL 傳遞 4. 伺服器以 ID 為鍵讀寫資料(檔案/資料庫/Redis) 5. 請求結束自動序列化儲存

1. 啟動會話


...

關鍵: 必須在 <html>、空白、BOM 之前呼叫,否則 Headers already sent 錯誤。
session.auto_start = On 可自動啟動,但不建議(效能、控制權)。

2. 存取 Session 變數

// 寫入
$_SESSION['user_id'] = 123;
$_SESSION['cart'] = ['item1', 'item2'];

// 讀取
$userId = $_SESSION['user_id'] ?? null;
$cart = $_SESSION['cart'] ?? [];

完整範例:跨頁面傳遞

// page1.php - 存入
session_start();
if ($_POST['season']) {
    $_SESSION['season'] = $_POST['season'];
    header("Location: page2.php");
    exit;
}
// 表單略

// page2.php - 讀取
session_start();
$season = $_SESSION['season'] ?? '未設定';
switch ($season) {
    case '春天': echo '綠意盎然'; break;
    case '夏天': echo '熱情四溢'; break;
    case '秋天': echo '豐收果實'; break;
    case '冬天': echo '白雪皚皚'; break;
    default: echo '無資料';
}

3. 銷毀會話

// 刪除單一變數
unset($_SESSION['season']);

// 徹底銷毀整個會話
session_destroy(); // 重置 $_SESSION 陣列,刪除伺服器端存儲

// 同時刪除客戶端 Session Cookie
setcookie(session_name(), '', time()-3600, '/');

安全配置建議

; php.ini
session.cookie_httponly = 1      ; 防 XSS 竊取
session.cookie_secure = 1        ; 僅 HTTPS 傳輸(需 HTTPS 站點)
session.use_strict_mode = 1      ; 拒絕未初始化的 Session ID
session.gc_maxlifetime = 1440    ; 24 分鐘廢棄回收
session.save_handler = redis     ; 分散式環境共享
session.save_path = "tcp://127.0.0.1:6379"

常見問題

  • Session 遺失: gc 回收、跨子域未共享 Cookie、負載均衡無共享存儲
  • 並發阻塞: 預設檔案鎖,長時間請求會阻塞同 Session 其他請求 → session_write_close() 提前釋放鎖
  • Session Fixation: 登入後呼叫 session_regenerate_id(true) 重新產生 ID
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved