繁体   English   中英

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

[英]asp.net How to expire a session from another session

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

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

你必须实现自己的方法

看看下面的内容:

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

请参阅:

当同一用户ID尝试登录多台设备时,如何终止其他设备上的会话?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM