Session 相當於一個客戶端(瀏覽器、App、FTP 等)對服務器的一次訪問會話。服務器為此建立唯一標識(session_id),本質是一個數組 $_SESSION。Session 的開始和結束不以業務登錄為準,也不因關閉瀏覽器或刷新頁面而結束。
| 函數 | 作用 | 影響範圍 |
|---|---|---|
session_unset() | 釋放內存中所有 $_SESSION 變量 | 不刪除 session 文件,不釋放 session_id |
session_destroy() | 刪除 session 文件並釋放 session_id | 內存中 $_SESSION 內容保留 |
unset($_SESSION['xxx']) | 刪除單個 session 變量 | 僅影響指定鍵 |
$_SESSION = array() | 清空所有 session 變量 | 重置整個數組 |
unset($_SESSION) — 會銷毀全局變量,無法恢復,導致無法再註冊 session 變量。session_unset() 在 PHP5+ 中已失效(因必須使用 $_SESSION),可棄用。session_destroy() 不會刪除客戶端 Cookie,需配合 setcookie() 手動刪除。<?php
// 1. 啟動會話(必須)
session_start();
// 2. 清空數據(二選一)
$_SESSION = array(); // 清空所有
// unset($_SESSION['xxx']); // 或刪除單個
// 3. 銷毀會話文件與 ID
session_destroy();
// 4. (可選) 刪除客戶端 Cookie
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
<?php
session_start();
session_destroy();
// 頁面跳轉
echo '<script>alert("已退出登錄"); location.href="login.php";</script>';
框架頁面注意:若在 iframe 中,需用 parent.location.href 實現頂層跳轉。