在我的应用程序中,我保存了用户的注销时间。当用户点击登录按钮时这很好,但我的要求是即使用户关闭浏览器也要保存注销时间。如果这是不可能的,请告诉我一旦用户关闭窗口后如何销毁会话。如何在浏览器关闭时结束会话
任何帮助,将不胜感激。
在我的应用程序中,我保存了用户的注销时间。当用户点击登录按钮时这很好,但我的要求是即使用户关闭浏览器也要保存注销时间。如果这是不可能的,请告诉我一旦用户关闭窗口后如何销毁会话。如何在浏览器关闭时结束会话
任何帮助,将不胜感激。
按照this answer,你应该能够处理beforeunload
事件,然后做一个AJAX注销。
未经检验的,但它应该像这样工作:
Ext.EventManager.on(window, 'beforeunload', function() {
Ext.Ajax.request({
url: 'logout.json',
timeout: 60000
});
});
它曾经是你不得不做同步阿贾克斯在事件处理程序。不知道在现代浏览器中是否仍然如此。如果你去异步,一定要用真实的客户端负载进行测试,这样你就不会遇到只出现在用户之间的竞争状态。
我会建议某种心跳来自客户端的Ajax呼叫,每五分钟说一次。如果您连续错过两次这样的调用,则会终止会话服务器端。这将处理用户未注销的所有情况(浏览器崩溃,操作系统崩溃,网络故障等)。
潜在的问题,作用于卸载事件:
感谢您的答复 – Gouse 2012-04-17 11:22:32
这回答了问题的最后部分。通过关闭浏览器自动关闭会话。根据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的值将被删除。
感谢Mat编辑它看起来不错的问题 – Gouse 2012-04-14 11:25:23