Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何终止特定会话?它们存放在哪里?_C#_Asp.net Mvc 4_Login_Concurrency_Sessionid - Fatal编程技术网

C# 如何终止特定会话?它们存放在哪里?

C# 如何终止特定会话?它们存放在哪里?,c#,asp.net-mvc-4,login,concurrency,sessionid,C#,Asp.net Mvc 4,Login,Concurrency,Sessionid,我们目前正在构建一个MVC4 web应用程序,该应用程序需要实现每个用户“独占”登录的软硬件。这意味着,每个用户只允许有一个活动会话。如果在该会话期间,同一用户从其他浏览器或主机成功登录,则需要终止旧会话 为此,我在用户登录时保存会话ID。当另一个登录发生时,我确实有这个用户的所有现有会话ID的列表(应该只有一个)。因此,我确实有一个会话ID作为字符串,我希望web应用程序使其失效/kill/drop——但是我如何以及在哪里可以做到这一点呢?所以我需要杀死会话本身,而不是其中的会话变量 我试图在

我们目前正在构建一个MVC4 web应用程序,该应用程序需要实现每个用户“独占”登录的软硬件。这意味着,每个用户只允许有一个活动会话。如果在该会话期间,同一用户从其他浏览器或主机成功登录,则需要终止旧会话

为此,我在用户登录时保存会话ID。当另一个登录发生时,我确实有这个用户的所有现有会话ID的列表(应该只有一个)。因此,我确实有一个会话ID作为字符串,我希望web应用程序使其失效/kill/drop——但是我如何以及在哪里可以做到这一点呢?所以我需要杀死会话本身,而不是其中的会话变量

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


谢谢你的帮助

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

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

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


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

谢谢您的回答。你是对的,你所描述的可以实现你想要的行为。尽管如此,我还是想把这个问题保留一段时间,因为我真的想知道是否有一种方法可以访问所有会话(当然是从服务器端)。Robert,如果需要,您可以创建一个额外的表来存储用户的每个会话。此表包含用户、会话id和时间戳。使用时间戳,您可以检查分配给每个用户的最后一个会话id。