浏览器关闭时杀死会话

时间:2015-02-22 10:50:59

标签: javascript c# asp.net asp.net-mvc-4

我需要在用户关闭浏览器或重定向到其他页面时终止会话。 我可以看到实现此功能的以下选项:

  1. 不使用会话登录。这不是我的情况,因为我必须改变很多,我还使用会话来获取其他数据。
  2. 我可以使用这样的东西:
  3.    
    window.onunload = window.onbeforeunload = (function () {
       ...
      })
    

    从此代码中调用清除会话并执行注销的操作。 听起来很讨厌,但同样重要的是 - 这个JavaScript代码只适用于IE。

    1. 我可以创建一些讨厌的代码,使用一些虚拟调用,让我们说每分钟,只是说服务器用户还活着。 但它真的很讨厌。它将在服务器上使用无用的负载,大量无用的调用,如果某些调用丢失(由于连接问题或其他原因),用户将注销。
    2. 还有其他选择吗?

2 个答案:

答案 0 :(得分:3)

你已离开#4:不要做任何事情,在一段合理的时间后(例如20分钟)让会议超时;如果他们在离开20分钟后尝试在该页面上做某事,只需显示一个页面告诉他们他们的会话已经过期并再次登录。这通常是最简单的选择。

如果你不想这样做,#3真的是你唯一可行的选择,但一次/分钟可能是矫枉过正。将会话超时设置为20分钟,记住用户何时做了什么,如果他们闲置(比方说)15分钟,请代表他们进行主动呼叫。但即使这样,我也会限制我做多少,几个小时后你可能只想将它们重定向到登录页面。

答案 1 :(得分:0)

我认为这个答案是正确的方法:

In javascript, how can I uniquely identify one browser window from another which are under the same cookiedbased sessionId

设置唯一窗口ID:

window.windowIdClient = "{978d-478ahjff-3849-dfkd-38395434}"; //or another randomly generated id.

将windowId与ip-address和session-id一起存储在数据库中。如果这三个不匹配,则用户退出。

此外,如果没有想到T.J.克劳德的选择,我自己使用它。