【问题标题】:Does closing the Application browser window end the session?关闭应用程序浏览器窗口是否会结束会话?
【发布时间】:2022-02-06 07:47:35
【问题描述】:

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

【问题讨论】:

    标签: spring spring-boot spring-mvc session


    【解决方案1】:

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

    如果您有网络检查工具,您会注意到,当您的浏览器第一次与服务器交互时,响应中有一个类似于 Set-Cookie: JSESSIONID=<session_id> 的标头(假设是 Tomcat)。服务器创建了一个会话并提供了该会话 ID。当请求没有会话 ID 或会话 ID 无效时,服务器通常会创建一个新会话。此 cookie 存储在浏览器的 cookie 存储中,并将在后续请求中作为 Cookie 标头发送。

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

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

    现在回答您的确切问题:

    问:关闭应用程序浏览器窗口会结束会话吗?

    浏览器 cookie 存储在关闭后将不再包含会话 ID。服务器会话将被孤立并最终超时/结束。

    问:当打开一个新窗口时,就会启动一个新会话

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多