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