2012-01-12 15 views
2

我創建一個新的郵件系統,其中記錄在許多用戶的功能。是否有明確的會議爲特定用戶

當用戶登錄了,我用session_destroy將它摧毀的其他會議用戶還可以,還是session_unset()更好的選擇?我的要求是當用戶註銷該用戶的所有會話應該被銷燬。

unset($_SESSION['session_name'])更好的選擇嗎?請建議。

+1

你將不得不存儲所有session_ids然後某處。選擇:將會話存儲在數據庫中。通過這種方式,會話變得更易於操作並且易於刪除。 – djot 2012-01-12 06:35:38

+0

這篇文章可能會幫助你 http://stackoverflow.com/questions/5193744/how-to-kill-a-all-php-sessions – 2012-01-12 12:02:09

回答

1

調用session_destroy只會銷燬當前會話的存儲會話數據。它既不刪除$_SESSION中的數據,也不會使當前會話標識失效。

要使某個帳戶的所有會話無效,您需要跟蹤與該帳戶關聯的活動會話。例如,您可以在將數據存儲到帳戶關聯的數據庫中使用表格。然後,所有你需要做的,是無效關聯到某個賬戶的所有會話是遍歷所有會話和無效逐一時間:

// invalidate current session 
$_SESSION = array(); 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', 1, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
} 
session_destroy(); 

// invalidate other sessions 
$sessionIDs = array(/* … */); // IDs of sessions associated to current account 
foreach ($sessionIDs as $sessionID) { 
    session_id($sessionID); 
    session_start(); 
    $_SESSION = array(); 
    session_destroy(); 
} 
0

您說該用戶的「其他」會話可能意味着銷燬該用戶帳戶的任何會話,包括可能在其他瀏覽器中的某些會話,並因此導致服務器上的不同會話。那是對的嗎?

如果您的意思是銷燬當前用戶的所有活動會話(即使在其他瀏覽器會話中),那麼將會話狀態存儲在數據庫中將是唯一可行的方法。

相關問題