关闭应用程序浏览器 window 是否会结束会话?

Does closing the Application browser window end the session?

在 spring MVC 应用程序中,关闭应用程序浏览器 window 是否会结束会话? 当打开一个新的 window 时,就会启动一个新会话 我的理解正确吗?

先从一些细节开始,然后在下面回答您的具体问题。

如果您有网络检查工具,您会注意到您的浏览器第一次与服务器交互时,响应中有一个 header,看起来像 Set-Cookie: JSESSIONID=<session_id>(假设 Tomcat).服务器创建了一个 session 并赋予了 session ID。当请求没有 session ID 或 session ID 无效时,服务器通常会创建一个新的 session。此 cookie 存储在浏览器的 cookie 存储中,并将在后续请求中作为 Cookie header.

发送

如果 cookie 没有定义过期时间,浏览器会将此 cookie 视为 session cookie,它是暂时的或仅在浏览器关闭之前有效。参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

因此关闭浏览器只会丢失 client-side 对 session 的引用(session ID)。虽然服务器上的 session 是孤立的(假设没有其他任何东西引用 session ID),但 session 仍然非常活跃。如果没有对 session 的进一步请求,session 最终将超时并结束。您可以通过 属性 - server.servlet.session.timeout.

配置超时

现在回答您的具体问题:

问:关闭应用程序浏览器 window 是否会结束 session?

关闭后浏览器 cookie 存储将不再包含 session ID。服务器 session 将被孤立并最终 timeout/end.

问:当打开一个新的 window 时,就会启动一个新的 session

如果浏览器已经打开并且您之前向服务器发出过一次请求,则打开另一个访问服务器的 window 不会创建新的 session。两者 windows 共享同一个 cookie 存储。

但是,如果您在启动浏览器进程或清除 cookie 后打开一个新的 window,则会创建一个新的 session。同样,这是由于从浏览器到服务器的请求不包含 session ID。