我創建一個新的郵件系統,其中記錄在許多用戶的功能。是否有明確的會議爲特定用戶
當用戶登錄了,我用session_destroy
將它摧毀的其他會議用戶還可以,還是session_unset()
更好的選擇?我的要求是當用戶註銷該用戶的所有會話應該被銷燬。
是unset($_SESSION['session_name'])
更好的選擇嗎?請建議。
我創建一個新的郵件系統,其中記錄在許多用戶的功能。是否有明確的會議爲特定用戶
當用戶登錄了,我用session_destroy
將它摧毀的其他會議用戶還可以,還是session_unset()
更好的選擇?我的要求是當用戶註銷該用戶的所有會話應該被銷燬。
是unset($_SESSION['session_name'])
更好的選擇嗎?請建議。
調用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();
}
您說該用戶的「其他」會話可能意味着銷燬該用戶帳戶的任何會話,包括可能在其他瀏覽器中的某些會話,並因此導致服務器上的不同會話。那是對的嗎?
如果您的意思是銷燬當前用戶的所有活動會話(即使在其他瀏覽器會話中),那麼將會話狀態存儲在數據庫中將是唯一可行的方法。
你將不得不存儲所有session_ids然後某處。選擇:將會話存儲在數據庫中。通過這種方式,會話變得更易於操作並且易於刪除。 – djot 2012-01-12 06:35:38
這篇文章可能會幫助你 http://stackoverflow.com/questions/5193744/how-to-kill-a-all-php-sessions – 2012-01-12 12:02:09