Session 如何在浏览器关闭时结束会话

Session 如何在浏览器关闭时结束会话,session,cookies,extjs,Session,Cookies,Extjs,在我的应用程序中,我节省了用户的注销时间。当用户单击“登录”按钮时,这可以正常工作,但我的要求是即使用户关闭浏览器,也要存储注销时间。如果这不可能,请告诉我如何在用户关闭窗口后立即销毁会话 任何帮助都将不胜感激。根据,您应该能够在卸载之前处理事件,然后执行AJAX注销 未经测试,但其工作原理如下: Ext.EventManager.on(window, 'beforeunload', function() { Ext.Ajax.request({ url: 'logout.json'

在我的应用程序中,我节省了用户的注销时间。当用户单击“登录”按钮时,这可以正常工作,但我的要求是即使用户关闭浏览器,也要存储注销时间。如果这不可能,请告诉我如何在用户关闭窗口后立即销毁会话

任何帮助都将不胜感激。

根据,您应该能够在卸载之前处理
事件,然后执行AJAX注销

未经测试,但其工作原理如下:

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

过去,您必须在事件处理程序中执行同步Ajax。我不知道在现代浏览器中是否仍然如此。如果您采用异步方式,请确保使用真实的客户端负载进行测试,这样您就不会遇到只在用户中出现的竞争情况

我建议客户打一个心跳Ajax电话,比如说每五分钟一次。如果连续错过两个这样的调用,则会终止会话服务器端。这将解决用户未注销的所有情况(浏览器崩溃、操作系统崩溃、网络故障等)

处理卸载事件时可能出现的问题:

  • 如果用户让你的应用/网站打开几个选项卡并关闭其中一个,会发生什么?您需要通知用户将进行跨选项卡注销
  • 浏览器对卸载时可以执行的操作有历史限制,以防止弹出窗口和无限循环阻止用户关闭浏览器。你永远不知道将来会发生什么。此处的历史记录:并通过上面回复中的StackOverflow链接

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

      手头的任务是使用
      Ext state CookieProvider
      创建一个没有过期日期的cookie。完全忽略
      expires
      配置将导致ExtJS将其默认为7天。检查一下这个。因此,您需要创建cookie,其显式
      expires
      为null,如下所示:

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

      浏览器关闭时,所有cookie值都将被删除。

      感谢您的回复此代码是否适用于所有浏览器(如chrome和Mozilla)谢谢您编辑此问题它看起来不错