【问题标题】:Is there a function to clear sessions for particular user是否有清除特定用户会话的功能
【发布时间】:2012-02-08 12:02:08
【问题描述】:

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

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

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

【问题讨论】:

  • 你必须将所有 session_ids 存储在某个地方。替代方案:将会话存储在数据库中。这样,会话变得更易于处理和删除。
  • 这篇文章可能对你有所帮助stackoverflow.com/questions/5193744/…

标签: php


【解决方案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();
}

【讨论】:

    【解决方案2】:

    您说的是该用户的“其他”会话,因此您大概是指销毁该用户帐户的任何会话,包括可能在其他浏览器中的一些会话,因此服务器上的不同会话。那是对的吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多