是否有清除特定用户会话的功能

时间:2012-01-12 06:26:57

标签: php

我正在创建一个新的邮件系统,其中有许多用户登录。

当用户退出并使用session_destroy时,它还会破坏其他用户的会话,还是session_unset()更好的选择?我的要求是当用户注销该用户的所有会话时应该销毁。

unset($_SESSION['session_name'])是更好的选择吗?请建议。

2 个答案:

答案 0 :(得分:1)

调用session_destroy只会破坏当前会话的存储会话数据。它既不删除$_SESSION中的数据,也不会使当前会话ID无效。

要使某个帐户的所有会话无效,您需要跟踪与该帐户关联的活动会话。例如,您可以使用数据库中的表将会话存储到帐户关联。然后,要使与某个帐户关联的所有会话无效,您需要做的就是遍历所有会话并使其一次无效:

// 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();
}

答案 1 :(得分:0)

您说该用户的“其他”会话因此可能意味着您销毁该用户帐户的所有会话,包括可能在其他浏览器中的某些会话,因此服务器上的会话也不同。那是对的吗?

如果你的意思是销毁当前用户的所有活动会话,即使在其他浏览器会话中,那么将会话状态存储在数据库中也是唯一可行的方法。