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

PHP Session 儲存資料:$_SESSION 超全域陣列完整操作指南

     編輯:PHP 相關知識

前言

$_SESSION 是 PHP 儲存跨請求使用者資料的核心機制。本文涵蓋啟動、讀寫、刪除、銷毀、安全設定與陣列操作完整指南。

基本操作流程

<?php
// 1. 必須在任何輸出前呼叫
session_start();

// 2. 寫入資料(關聯陣列)
$_SESSION['user'] = [
    'id'       => 123,
    'name'     => 'Alice',
    'role'     => 'admin',
    'login_at' => time(),
];

// 3. 讀取資料
$userId   = $_SESSION['user']['id'] ?? null;
$userName = $_SESSION['user']['name'] ?? 'Guest';

// 4. 刪除特定鍵
unset($_SESSION['user']['login_at']);

// 5. 銷毀整個 Session(登出)
// session_unset(); // 僅清空 $_SESSION 陣列
// session_destroy(); // 刪除伺服器端 Session 檔案與 Cookie
?>

關鍵設定(php.ini 或 runtime)

; 安全相關建議值
session.use_strict_mode = 1          ; 拒絕未初始化的 Session ID
session.use_only_cookies = 1         ; 僅透過 Cookie 傳遞 ID(防 Session Fixation)
session.cookie_httponly = 1          ; 禁止 JS 存取 Cookie(防 XSS 竊取)
session.cookie_secure = 1            ; 僅 HTTPS 傳輸 Cookie(生產環境必須)
session.cookie_samesite = "Strict"   ; CSRF 保護 (Lax/Strict/None)
session.gc_maxlifetime = 1440        ; 垃圾回收壽命(秒),24分鐘

陣列操作最佳實務

  • 結構化儲存:將相關資料群組為子陣列(如 $_SESSION['cart']、$_SESSION['user']),避免鍵名衝突。
  • 參考傳遞修改:$cart = &$_SESSION['cart']; $cart[] = $item; 直接修改 Session 陣列。
  • 檢查存在:isset($_SESSION['key']) 或 array_key_exists('key', $_SESSION)。

安全防護:Session Fixation 攻擊防禦

<?php
session_start();

// 登入成功後,重新產生 Session ID(保留資料)
if ($loginSuccess) {
    session_regenerate_id(true); // true = 刪除舊 Session 檔案
}
?>

分散式 Session 儲存(Redis/Memcached)

<?php
// php.ini 或 runtime
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=password');
// 或使用 Memcached
// ini_set('session.save_handler', 'memcached');
// ini_set('session.save_path', '127.0.0.1:11211');
session_start();
?>

總結

$_SESSION 操作簡單但安全設定關鍵。啟用 use_only_cookies、httponly、secure、samesite、strict_mode 並登入後 session_regenerate_id(),可抵禦大多數 Session 相關攻擊。希望本文對您的 PHP 程式設計有所幫助。

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