session_destroy

(PHP 4, PHP 5, PHP 7, PHP 8)

session_destroy銷毀一個會話中的全部數(shù)據(jù)

說明

session_destroy(): bool

session_destroy() 銷毀當前會話中的全部數(shù)據(jù), 但是不會重置當前會話所關聯(lián)的全局變量, 也不會重置會話 cookie。 如果需要再次使用會話變量, 必須重新調用 session_start() 函數(shù)。

注意: 通常情況下,在你的代碼中不必調用 session_destroy() 函數(shù), 可以直接清除 $_SESSION 數(shù)組中的數(shù)據(jù)來實現(xiàn)會話數(shù)據(jù)清理。

為了徹底銷毀會話,必須同時重置會話 ID。 如果是通過 cookie 方式傳送會話 ID 的,那么同時也需要 調用 setcookie() 函數(shù)來 刪除客戶端的會話 cookie。

當啟用了 session.use_strict_mode 配置項的時候,你不需要刪除過期會話 ID 對應的 cookie, 因為會話模塊已經(jīng)不再接受攜帶過期會話 ID 的 cookie 了, 然后它會生成一個新的會話 ID cookie。 建議所有的站點都啟用 session.use_strict_mode 配置項。

警告

過早的刪除會話中的數(shù)據(jù)可能會導致不可預期的結果。 例如,當存在從 JavaScript 或者 URL 鏈接過來的并發(fā)請求的時候, 某一個請求刪除了會話中的數(shù)據(jù),會導致其他的并發(fā)請求無法使用會話數(shù)據(jù)。

雖然當前的會話處理模塊不會接受為空的會話 ID, 但是由于客戶端(瀏覽器)的處理方式, 立即刪除會話中的數(shù)據(jù)可能會導致生成為空的會話 cookie, 進而導致客戶端生成很多不必要的會話 ID cookie。

為了避免這種情況的發(fā)生,你需要在 $_SESSION 中設置一個時間戳, 在這個時間戳之后的對于會話的訪問都將被拒絕。 或者,確保你的應用中不存在并發(fā)請求。 這個規(guī)則同樣適用于 session_regenerate_id()。

返回值

成功時返回 true, 或者在失敗時返回 false

范例

示例 #1 銷毀會話數(shù)據(jù)以及 $_SESSION

<?php
// 初始化會話。
// 如果要使用會話,別忘了現(xiàn)在就調用:
session_start();

// 重置會話中的所有變量
$_SESSION = array();

// 如果要清理的更徹底,那么同時刪除會話 cookie
// 注意:這樣不但銷毀了會話中的數(shù)據(jù),還同時銷毀了會話本身
if (ini_get("session.use_cookies")) {
    
$params session_get_cookie_params();
    
setcookie(session_name(), ''time() - 42000,
        
$params["path"], $params["domain"],
        
$params["secure"], $params["httponly"]
    );
}

// 最后,銷毀會話
session_destroy();
?>

注釋

注意:

對于舊版本中不使用 $_SESSION 的代碼, 僅能使用 session_unset() 來完成會話銷毀工作。

參見