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

PHP session_unset() vs session_destroy() 差異分析與正確登出流程

     編輯:PHP 相關知識

兩函式行為不同,單獨呼叫都不足以完整清除 Session,必須依序執行才能徹底釋放伺服器與客戶端資源。

行為差異對照

函式記憶體 $_SESSIONSession 檔案Session ID
session_unset()清空所有變數值保留保留
session_destroy()保留 (仍可讀取)刪除釋放 (新請求產生新 ID)

正確登出流程 (三步驟)

session_start();
session_unset(); // 1. 清空記憶體資料
session_destroy(); // 2. 刪除伺服器檔案、釋放 ID
setcookie(session_name(), '', time()-3600, '/'); // 3. 刪除客戶端 Cookie (可選)
header('Location: /login');
exit;

常見錯誤寫法

  • unset($_SESSION):僅銷毀區域變數,不影響 Session 儲存機制,下次請求資料仍在。
  • 只呼叫 session_destroy():$_SESSION 陣列仍保留舊值,若程式未重新 session_start() 直接讀取會誤判已登入。
  • 順序顛倒:先 destroy 再 unset 會導致 session_unset() 找不到 Session 而噴 Warning。

session_unregister() (已移除)

PHP 5.4 移除,舊代碼請改用 unset($_SESSION['key'])。

安全建議

  1. 登入後 session_regenerate_id(true) 防 Session Fixation。
  2. 敏感操作前驗證 $_SESSION['user_id'] 而非單檢查 isset($_SESSION)。
  3. HTTPS 站點設定 session.cookie_secure=1、session.cookie_httponly=1、session.use_strict_mode=1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved