我怎么能杀死一个特定的会话?它们存放在哪里?

时间:2014-03-21 09:52:08

标签: c# asp.net-mvc-4 login concurrency sessionid

我们目前正在构建一个MVC4 Web应用程序,需要实现" exclusive"每个用户登录。这意味着,每个用户只能拥有一个活动会话。如果在该会话期间,同一用户的另一个成功登录发生在另一个浏览器或主机上,则需要终止旧会话。

为了做到这一点,我在用户登录时保存会话ID。当另一次登录时,我确实拥有该用户的所有现有会话ID列表(应该只有一个)。所以我确实有一个会话ID作为字符串,我希望Web应用程序无效/终止/删除 - 但我该怎样以及在哪里可以做到这一点?所以我需要杀死一个会话本身,而不是其中的会话变量。

我试图在System.Web.HttpContext.Current.Session中找到一些东西,但据我所知,我只能访问当前会话(在当前用户和请求的上下文中),但是如何访问所有其他会话已建立的此Web应用程序会话?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您必须在服务器端控制会话。在服务器端,您可以访问分配给每个新会话的会话ID。

因此,当用户登录时,您将分配的会话ID存储在users表中。他得到了这个会话ID。 在每个请求中,检查会话ID是否等于存储在数据库中的会话ID。

当用户发出另一个登录时,服务器会分配另一个会话ID,对吧?您将此新会话ID存储在用户的表中。

之后,来自旧会话的请求将被拒绝/重定向,因为会话ID不再有效。旧的会话ID被最后一次登录替换。