asp.net如何使来自另一个会话的会话到期

时间:2011-08-04 11:47:14

标签: c# asp.net session session-state

我有一个要求,如果用户登录到应用程序,应该注销任何具有相同用户的会话,即如果同一用户尝试从不同的IP登录到应用程序,则应在用户登录时关闭第一个会话

4 个答案:

答案 0 :(得分:2)

不幸的是,ASP.NET的本质意味着您无法判断用户是否已登录。当然,您可以记录用户访问您的应用程序的事实,但无法告诉他们已经放弃了他们的旧会话,可能是通过关闭他们的浏览器,并且他们的新登录是有效的。

你必须实现自己的方法

看看下面的内容:

http://geekswithblogs.net/Frez/articles/preventing-a-user-from-having-multiple-concurrent-sessions.aspx

答案 1 :(得分:0)

如果您将最新使用的IP存储在数据库中,则所有会话都可以检查下一页加载或任何处理程序调用,如果他们的请求来自相同的IP,如果不是,则可以调用Session.Abandon();

答案 2 :(得分:0)

我不认为你能够在实际尝试做某事之前将它们记录下来,即提出新请求。

我的建议是始终将“上次使用的session_id”与时间戳一起存储在用户发出的每个请求中。

如果针对特定用户的下一个请求具有不同的session_id,您知道他们刚刚再次登录,因此您不应再接受来自旧sessionid的请求,并且可以删除其会话,然后将其重定向到错误页面

答案 3 :(得分:0)

请参阅:

When the same user ID is trying to log in on multiple devices, how do I kill the session on the other device?

你必须实施自己的解决方案,正如@Massimiliano上面所说的那样。

我有类似的要求,并提出了一个非常光滑的解决方案,在上面的链接中演示。简而言之,我的要求是一次只能有一个用户登录。如果相同的用户ID尝试在其他地方登录,则它会通过检查不同会话ID下的现有登录来终止第一次登录的会话(这使得用户ID可以从其多个实例登录)网络浏览器在他们的计算机上[相同的会话ID],这是常见的,但不是来自不同的计算机[不同的会话ID](例如,可能是由于某人窃取了他们的凭据))。通过修改代码,你可以改变它的行为 - 即,防止第二次登录尝试,而不是杀死已经激活和使用的第一次登录。

当然,它可能不适合您所需要的100%,因此可以随意修改它以满足您的需求。