session_destroy

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

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

說明

session_destroy(): bool

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

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

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

當(dāng)啟用了 session.use_strict_mode 配置項(xiàng)的時(shí)候,你不需要?jiǎng)h除過期會(huì)話 ID 對應(yīng)的 cookie, 因?yàn)闀?huì)話模塊已經(jīng)不再接受攜帶過期會(huì)話 ID 的 cookie 了, 然后它會(huì)生成一個(gè)新的會(huì)話 ID cookie。 建議所有的站點(diǎn)都啟用 session.use_strict_mode 配置項(xiàng)。

警告

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

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

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

返回值

成功時(shí)返回 true, 或者在失敗時(shí)返回 false

范例

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

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

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

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

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

注釋

注意:

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

參見