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

Tho*_*mas 4 forms-authentication session-management asp.net-mvc-3

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

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

关于如何破解这个问题,我有一些想法,但我很好奇是否已经建立了使用IIS或FormsAuthentication API的方法.

Eth*_*iac 5

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

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

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

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