浏览器关闭时终止会话
Killing session when browser is closing
当用户关闭浏览器或重定向到其他页面时,我需要终止会话。我可以看到实现此功能的以下选项:
- 不使用会话登录。这不是我的情况,因为我必须改变很多,而且我还使用会话来处理其他一些数据。
- 我可以使用这样的东西:
window.onunload = window.onbeforeunload = (function () {
...
})
并从此代码调用清理会话并执行注销的操作。听起来很 讨厌,但同样重要的是 - 这个JavaScript代码只在IE中工作。
- 我可以创建一些讨厌的代码,使用一些虚拟调用,让我们说每分钟一次,只是为了说用户还活着的服务器。但这真的很讨厌。它将在服务器上使用无用的负载,大量无用的调用,如果某些调用丢失(由于连接问题或其他原因(,用户将注销。
还有其他选择吗?
你已经离开了#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的选择,我自己使用它。
相关文章:
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 验证会话中是否存在对象's数组
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 通过javascript从会话中提取用户名
- 将会话变量从一个页面传递到另一个页面
- 如何保持会话的活力
- Codeigniter会话概念简要说明
- Php未获取会话的最新值
- 当达到codeigniter/tank auth会话超时时,在ajax调用中处理php重定向
- 如何检测用户是否在同一会话中打开了多个窗口或选项卡
- PHP会话页面刷新不起作用
- 有可能通过sessionID获得快速会话吗
- 让会话值可用于JavaScript的好方法是什么
- 浏览器关闭时终止会话
- 如何在django关闭浏览器时终止会话
- 使用 http 删除终止用户会话
- 关闭浏览器终止web服务器会话
- 更新数据库表,并在浏览器关闭时终止会话
- 如何在终止之间重复使用会话 Cookie (安卓)