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

PHP Session 基本操作:啟動、設定、讀取、刪除與銷毀

     編輯:PHP 綜合知識

Session vs Cookie

特性SessionCookie
儲存位置伺服器端(檔案/Redis/Memcached/DB)客戶端瀏覽器
安全性較高(資料不曝露給用戶)較低(可被竄改、攔截)
資料類型支援陣列、物件、任意序列化資料僅字串(需自行序列化)
生命週期瀏覽器關閉或 gc_maxlifetime 過期可設定持久過期時間
容量限制受伺服器記憶體/磁碟限制單一 Cookie ≤ 4KB

基本操作範例

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

// 2. 設定資料(支援多維陣列、物件)
$_SESSION['user'] = [
    'id' => 123,
    'name' => 'Alice',
    'roles' => ['admin', 'editor'],
    'login_at' => time(),
];

// 3. 讀取資料
if (isset($_SESSION['user'])) {
    echo "歡迎, {$_SESSION['user']['name']}<br>";
    print_r($_SESSION['user']);
}

// 4. 刪除單一鍵
unset($_SESSION['user']['roles']);

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

常見設定(php.ini)

  • session.save_handler = files(預設)、redis、memcached、database
  • session.gc_maxlifetime = 1440(秒,預設 24 分鐘)
  • session.cookie_lifetime = 0(0 = 瀏覽器關閉即過期)
  • session.use_strict_mode = 1(防止 Session Fixation 攻擊)
  • session.cookie_httponly = 1(防止 JS 存取 Session ID)
  • session.cookie_secure = 1(僅 HTTPS 傳輸,生產環境必開)

分散式 Session 方案

多伺服器叢集需共享 Session,請改用 Redis 或 資料庫 作為儲存後端:

# php.ini (需安裝 php-redis)
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=yourpass"

安全最佳實踐

  1. 登入後**重新生成 Session ID**:session_regenerate_id(true);
  2. 敏感操作(修改密碼、付款)前**驗證 Session 有效性**。
  3. 設定 session.cookie_samesite = 'Lax' 或 'Strict' 防禦 CSRF。
  4. 定期清理過期 Session 檔案(啟用 gc 或定時任務)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved