浏览器关闭时终止会话

Killing session when browser is closing

本文关键字:终止 会话 浏览器      更新时间:2024-02-27

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

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

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

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

还有其他选择吗?

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

如果你不想这样做,#3 确实是您唯一可行的选择,但一次/分钟可能矫枉过正。将会话超时设置为 20 分钟,记住用户何时执行了某些操作,如果他们空闲(例如(15 分钟,请代表他们进行主动呼叫。但即便如此,我也会限制我这样做的次数,几个小时后你可能只想将它们重定向到登录页面。

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

在javascript中,我如何唯一地识别一个浏览器窗口和另一个浏览器窗口,它们位于同一个基于cookied的sessionId下

设置唯一的窗口 ID:

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

将该窗口 ID 与 IP 地址和会话 ID 一起存储在数据库中。如果这三者不匹配,则用户将注销。

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