使用Forms身份验证在ASP.NET MVC3中注销用户的其他会话

时间:2011-05-18 16:25:55

标签: asp.net-mvc-3 forms-authentication session-management

我正在使用Forms身份验证构建一个ASP.NET MVC3应用程序,我想在用户登录时注销用户的所有现有会话。我正在尝试阻止不同工作站的多个人登录和在同一个帐户下工作。

有没有一种标准的处理方式?注销现有会话很简单,但我没有遇到过通过同一帐户检查其他会话并将其注销的方法。

我对如何破解这一点有一些想法,但我很好奇是否已经建立了使用IIS或FormsAuthentication API的方法。

2 个答案:

答案 0 :(得分:5)

由于网络的无状态,在他们发出下一个请求之前,您无法“注销”会话(例如,会话可能会在cookie中维护,而不能在客户端之外写入请求 - 响应交互的上下文。)

还有一个解决方案,假设您正在使用会话状态,并且最好为所有需要“身份验证”的控制器配备一个公共基本控制器。

成功登录后,生成令牌(可能是guid)并将其存储在会话中。还要将此内容写入由用户标识键入的应用程序范围的商店(例如数据库或应用程序上下文)。

在基本控制器中(或者您必须创建操作过滤器)在针对在应用程序范围的商店中为userid注册的令牌检查会话中的令牌。如果它们不匹配,请使用标准SignOut()电话注销用户。

答案 1 :(得分:0)

您可以使用基于Membership.IsOnlineLastActivityDate属性:

  

如果是,用户被视为在线   当前日期和时间减去   UserIsOnlineTimeWindow属性值   早于LastActivityDate   为用户。