当前位置: 首页 > 面试题库 >

Java:为什么在关闭标签页或浏览器时未破坏http会话?

鲁展
2023-03-14
问题内容

我有以下HttpSessionlistener的实现

public class SessionListener implements HttpSessionAttributeListener, HttpSessionListener {


public void attributeAdded(HttpSessionBindingEvent event) {
   ...

}


public void attributeRemoved(HttpSessionBindingEvent event) {

    ...
}

public void attributeReplaced(HttpSessionBindingEvent event) {

}

//HttpSesion creation & destruction
public void sessionCreated(HttpSessionEvent event) {
    HttpSession session = event.getSession();
    //log created time


}

public void sessionDestroyed(HttpSessionEvent event) {
    HttpSession session = event.getSession();
    long destroyedTime = System.currentTimeMillis();
    //log destroyed time

}

}

基本上,我记录会话的创建和销毁时间。但是,如果会话很长(默认为30分钟),并且用户同时关闭浏览器,则

sessionDestroyed

不叫?

这是为什么 ?是否存在一种解决方法来准确记录会话被销毁的时间(用户关闭浏览器时)?这不应该是浏览器的问题,在关闭会话时终止会话吗?

我必须实现任何接口才能正常工作吗?

谢谢 !


问题答案:

当关闭浏览器或关闭选项卡时,服务器如何知道?此时,浏览器不会向服务器发送任何内容。

这是HTTP的基本部分-它是请求/响应协议,而不是“永久开放的对话”,您可以在其中确定一方是否离开了对话。将其视为一系列电报而不是电话-
并且您无法确定何时收到最后一次收到的电报。

您需要围绕此进行设计-避免 需要 知道何时关闭浏览器。有一些丑陋的解决方法,例如使AJAX用心跳消息轮询服务器,但是更改设计是更好的解决方案。



 类似资料:
  • 我正在使用spring boot开发一个小应用程序。我的问题是,我需要显示用户的名字时,一个用户的身份验证正确。每次身份验证(每次登录输入用户名和密码)都会正确显示名字。但是如果我们关闭浏览器并在会话超时之前重新打开它,而没有输入用户名和密码,则不会显示First name。 身份验证时我的口供 安全配置 会话列表 我参考了Java:为什么当tab或浏览器关闭时http会话不被破坏?,正如他们所说

  • 问题内容: 是否有跨浏览器的JavaScript / jQuery代码来检测浏览器或浏览器选项卡是否已关闭,但不是由于单击链接而导致的? 问题答案: 如果我正确地理解了您,您想知道标签/窗口何时有效关闭。好吧,AFAIK 检测事件的唯一方法是&事件。 不幸的是(或幸运的是?),当您通过或浏览器的后退按钮离开网站时,也会触发这些事件。因此,这是我能给出的最佳答案,我认为您无法从本机检测Java 脚本

  • 问题内容: 我想在Angularjs控制器中触发JS代码。 我有这个: 当我离开使用该控制器的页面时,此方法工作正常,但当我关闭标签/浏览器时,该方法不起作用。 标签/浏览器关闭时是否需要使用其他代码来触发JS代码? 问题答案: 从角度文档: $ destroy(); 从父范围中删除当前范围(及其所有子级)。删除意味着对$ digest()的调用将不再传播到当前作用域及其子级。删除还意味着当前范围

  • 浏览器上用js怎么区分 关闭标签页还是关闭整个浏览器? 现在是想在关闭整个浏览器的时候清空登录信息,关闭标签页的时候不清空?(使用windows,chrome)

  • 问题内容: 如何在用户离开Gmail之前向用户要求确认? 我在各个地方搜索了这个问题,但他们提到的只是使用javascript window.unload 和 window.onbeforeunload 。而且,由于它被阻塞,大多数情况下在chrome中都不起作用。 问题答案: 尝试这个:

  • 问题内容: 如何关闭当前的浏览器标签?以下无效。 要么 要么 问题答案: 试试这个: 来源:https : //vaadin.com/forum/#!/ thread/ 235330