asp.net如何使一个会话从另一个会话过期

本文关键字:会话 过期 另一个 net 何使一 asp | 更新日期: 2023-09-27 18:04:42

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

asp.net如何使一个会话从另一个会话过期

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

你必须实现自己的方法

请看下面的内容:

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

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

我不认为你将能够注销他们,直到他们真正尝试做一些事情,即提出一个新的请求。

我的建议是始终存储"最后使用的session_id"以及用户发出的每个请求的时间戳。

如果一个特定用户的下一个请求有不同的session_id,你知道他们只是再次登录,所以你不应该再接受来自旧sessionid的请求,你可以删除他们的会话,然后重定向到错误页面

请参考:

当同一用户ID试图在多台设备上登录时,如何在另一台设备上终止会话?

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

我也有类似的需求,并提出了一个相当巧妙的解决方案,如上面的链接所示。简而言之,我的要求是一次只允许一个用户登录。如果相同的用户ID试图在其他地方登录,那么它会通过检查在不同会话ID下的现有登录来终止第一次登录的会话(这使得用户ID可以从他们计算机上的web浏览器的多个实例[相同的会话ID]登录,这是常见的,但不是从不同的计算机[不同的会话ID]登录(可能由于有人窃取了他们的凭据,例如))。通过修改代码,您可能会改变这种行为-即,阻止第二次登录尝试,而不是杀死已经激活并正在使用的第一次登录。

当然,它可能不是100%符合你的需要,所以你可以随意修改它以满足你的需要。