2012-04-14 142 views
0

在我的应用程序中,我保存了用户的注销时间。当用户点击登录按钮时这很好,但我的要求是即使用户关闭浏览器也要保存注销时间。如果这是不可能的,请告诉我一旦用户关闭窗口后如何销毁会话。如何在浏览器关闭时结束会话

任何帮助,将不胜感激。

+0

感谢Mat编辑它看起来不错的问题 – Gouse 2012-04-14 11:25:23

回答

0

按照this answer,你应该能够处理beforeunload事件,然后做一个AJAX注销。

未经检验的,但它应该像这样工作:

Ext.EventManager.on(window, 'beforeunload', function() { 
    Ext.Ajax.request({ 
    url: 'logout.json', 
    timeout: 60000 
    }); 
}); 
+0

感谢您的回复此代码适用于所有浏览器,如铬和mozilla – Gouse 2012-04-14 10:55:05

+0

它工作正常谢谢你非常多 – Gouse 2012-04-17 11:23:02

2

它曾经是你不得不做同步阿贾克斯在事件处理程序。不知道在现代浏览器中是否仍然如此。如果你去异步,一定要用真实的客户端负载进行测试,这样你就不会遇到只出现在用户之间的竞争状态。

我会建议某种心跳来自客户端的Ajax呼叫,每五分钟说一次。如果您连续错过两次这样的调用,则会终止会话服务器端。这将处理用户未注销的所有情况(浏览器崩溃,操作系统崩溃,网络故障等)。

潜在的问题,作用于卸载事件:

  • 用户是否有您的应用程序/网站打开我几个选项卡,并关闭其中的一个,会发生什么?您需要通知用户将会有一个交叉表注销。
  • 浏览器对卸载时可以执行的操作有一定的限制,以防止弹出窗口和无限循环阻止用户关闭浏览器。你永远不知道未来会发生什么。这里的历史记录:http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript并通过上面回复中的StackOverflow链接。
+0

感谢您的答复 – Gouse 2012-04-17 11:22:32

0

这回答了问题的最后部分。通过关闭浏览器自动关闭会话。根据Wikipedia:当cookie创建时未设置到期日期或有效时间间隔时,将创建一个会话cookie。当用户关闭浏览器时,Web浏览器通常会删除会话cookie。

手头的任务是使用Ext-state-CookieProvider创建没有失效日期的cookie。完全没有配置expires配置,会导致ExtJS将其默认为7天。检查the source为此。因此,你需要用空的明确expires创建的cookie,像这样:

var cp = Ext.create('Ext.state.CookieProvider', { 
    expires: null 
}); 

在浏览器关闭所有cookie的值将被删除。

相关问题