4

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

有处理这个的标准方法吗?注销现有会话很容易,但我还没有找到通过同一帐户检查其他会话并将其注销的方法。

我对如何破解它有一些想法,但我很好奇是否有使用 IIS 或 FormsAuthentication API 的既定方法。

4

2 回答 2

5

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

仍然有一个解决方案,它假设您正在使用会话状态,并且最好为所有需要“身份验证”的控制器提供一个通用的基本控制器。

成功登录后,生成一个令牌(可能是一个 guid)并将其与会话一起存储。还将其写入由用户 ID 键入的应用程序范围的存储(例如数据库或应用程序上下文)。

在基本控制器中(否则您必须创建一个操作过滤器)检查会话中的令牌与在应用程序范围存储中为用户 ID 注册的令牌。SignOut()如果它们不匹配,请使用标准调用注销用户。

于 2011-05-18T21:24:01.013 回答
0

您可以使用Membership.IsOnline基于以下内容的属性LastActivityDate

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

于 2011-05-18T16:35:26.387 回答