从所有浏览器注销用户

Logout user from all browsers

我正在使用 FormsAuthentication 机制并通过

对用户进行身份验证
FormsAuthentication.SetAuthCookie(...);

我可以从所有浏览器中以某种方式注销当前用户吗?

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

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

登录时在table中添加一行,将guid保存在cookie中。 使用 userID 检查用户身份验证并启用 guid。

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

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

您可能实现类似目标的唯一方法是以某种方式指示用户帐户已注销。这可能是您的个人资料 table 或其他某种类型的永久性存储介质上的附加列。无论您做什么,当经过身份验证的用户访问您网站的某些部分时,您都需要查看此信息。如果他们之前已注销,您将在该 browser/machine 实例上再次将他们注销。当他们再次登录时,您将清除之前设置的任何内容,以便他们保持身份验证状态。换句话说,当用户试图从该浏览器访问站点时,您必须检查每个浏览器中的 auth cookie 并将其无效。在用户从该特定浏览器访问您的站点之前,无法执行任何操作。

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

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