在我的应用程序中,我正在保存用户的注销时间。当用户单击登录按钮时,这工作正常,但我的要求是即使用户关闭浏览器也要存储注销时间。如果无法做到这一点,请告诉我如何在用户关闭窗口后立即销毁会话。
任何帮助都将不胜感激。
答案 0 :(得分:2)
过去你必须在事件处理程序中执行 synchronous Ajax。不知道在现代浏览器中是否仍然如此。如果您是异步的,请确保使用真实的客户端负载进行测试,这样您就不会遇到仅在用户中出现的竞争条件。
我建议每隔五分钟从客户那里得到一些心跳的Ajax电话。如果连续错过两个这样的调用,则会终止会话服务器端。这将解决用户未注销的所有情况(浏览器崩溃,操作系统崩溃,网络故障等)。
处理卸载事件的潜在问题:
答案 1 :(得分:0)
根据this answer,您应该能够处理beforeunload
事件,然后执行AJAX注销。
未经测试,但它应该像这样工作:
Ext.EventManager.on(window, 'beforeunload', function() {
Ext.Ajax.request({
url: 'logout.json',
timeout: 60000
});
});
答案 2 :(得分:0)
这回答了问题的最后部分。关闭浏览器时自动关闭会话。根据{{3}}:如果在创建cookie时未设置到期日期或有效期间隔,则会创建会话cookie。当用户关闭浏览器时,Web浏览器通常会删除会话cookie。
手头的任务是使用Ext-state-CookieProvider
创建一个没有过期日期的cookie。完全忽略expires
配置,将导致ExtJS将其默认为7天。请检查Wikipedia。因此,您需要使用明确的expires
null创建cookie,如下所示:
var cp = Ext.create('Ext.state.CookieProvider', {
expires: null
});
浏览器关闭时,将删除所有Cookie值。