【问题标题】:Logout user from all browsers从所有浏览器注销用户
【发布时间】:2017-06-05 14:05:03
【问题描述】:

我正在使用 FormsAuthentication mechanizm 和 auth users via

FormsAuthentication.SetAuthCookie(...);

我可以从所有浏览器注销当前用户吗?

【问题讨论】:

  • 所有浏览器是什么意思...你的意思是像IE、Edge、Chrome、Safari等吗?又名...计算机上安装的每个浏览器?据我所知......您必须弄清楚如何找到所有已安装浏览器的列表,然后弄清楚如何(如果可能的话)强制用户在该浏览器上注销您的系统。
  • 例如,如果我在一台计算机上登录并在另一台计算机上登录。我需要从这 2 个浏览器中注销当前用户。你知道怎么做吗?
  • 你想什么时候做?当用户通过某个管理界面从一个浏览器或服务器端注销时。

标签: c# asp.net asp.net-mvc forms-authentication


【解决方案1】:

在身份验证参数中添加一个 guid 参数。也像这样将 guid 保存到会话表中;

  public class sessionLog
  {
     public int UserID { get;set;}
     public string Guid {get;set;}
     // ... may be you can add IP, datetime or isSessionClosed etc
  }

登录时向表中添加一行,将 guid 保存在 cookie 中。 使用 userID 和 guid 检查用户身份验证是否已启用。

使用 guid 删除行注销或使用 userID 删除所有以关闭所有会话。

【讨论】:

    【解决方案2】:

    从技术上讲,这是不可能的。用户通过在浏览器中设置的加密 cookie 进行身份验证。注销用户只会使该 cookie 无效。没有办法使其他浏览器甚至其他机器中可能存在的 cookie 失效。

    您可能实现此类目标的唯一方法是以某种方式表明,与用户的帐户相关联,他们已被注销。这可能是您的配置文件表或其他一些类型的持久存储介质上的附加列。无论您做什么,当经过身份验证的用户访问您网站的某些部分时,您都需要查看此内容。如果他们之前已注销,那么您将在该浏览器/机器实例上再次将其注销。当他们再次登录时,您将清除您之前设置的任何内容,以便他们保持身份验证。换句话说,当用户尝试从该浏览器访问该站点时,您必须检查并使每个浏览器中的 auth cookie 无效。在用户从该特定浏览器访问您的网站之前,无法执行任何操作。

    【讨论】:

      【解决方案3】:

      您需要在应用程序变量中存储登录用户列表。如果具有该 Guid 的用户尝试再次登录,您可以显示他们已经在其他地方登录的消息....

      我认为一旦授予用户会话,您就无法控制用户会话,但是如果您尝试从其他地方登录,您可以添加逻辑来拒绝对功能的访问(我不确定您为什么要这样做因为从不同设备登录并不总是恶意的)。

      【讨论】:

        猜你喜欢
        • 2016-05-15
        • 2017-06-17
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多