【问题标题】:Httpsession is applicable for per user or per browser?Httpsession 适用于每个用户还是每个浏览器?
【发布时间】:2012-01-16 03:40:39
【问题描述】:

我使用 tomcat 作为我的网络服务器。我在 IE 中点击了一些 url,并为该请求在 HttpSession 中放置了一些对象。

现在我的问题:

  1. 如果我关闭浏览器并在新浏览器中点击 url,我之前放入会话的对象是否可用?

  2. 如果我不关闭浏览器并在新选项卡/窗口中点击 url,我之前放入会话的对象是否可用?

The HttpSession javadoc 说如下:

提供一种在多个页面请求或访问网站时识别用户并存储有关该用户的信息的方法。

根据我的理解,这里的“用户”是指“浏览器”。一旦我们打开一个新的浏览器,Tomcat/任何网络服务器都会将它视为一个新用户。它是否正确? Tomcat 是使用 cookie 还是重写 URL 来实现的?

javadoc 还说:

会话信息的范围仅限于当前的 Web 应用程序 (ServletContext)。

如果是这种情况,我们在会话中设置的任何对象都应该对所有用户请求可见,即使是从不同的机器触发,因为每个 web 服务器都有 servlet 上下文。但在应用程序范围不在会话范围内的情况下,这是正确的。我没有明白它在这里想说什么。

【问题讨论】:

标签: http web-applications tomcat servlets


【解决方案1】:

我认为这取决于服务器实现(会话 cookie 或 URL 中的参数)。

默认情况下,Tomcat 使用 session-cookies,如果用户代理拒绝 cookie,则使用 URL 参数。

所以行为当然会改变。

  • 带有cookies
    1. 没有
    2. 是的
  • 带有网址
    1. 不;是,如果复制了带有 &JSESSIONID 的完整 URL
    2. 不;是,如果复制了带有 &JSESSIONID 的完整 URL

【讨论】:

    【解决方案2】:

    会话确实绑定到单个浏览器,并且在此浏览器中打开的所有框架/选项卡共享同一个会话。如果退出浏览器,您将丢失会话。

    会话跟踪是使用 cookie 实现的,但如果浏览器不接受 cookie,则可以回退到 URL 重写。然而,这要求开发人员谨慎行事,并始终使用适当的方法或标签来对应用程序的每个链接和操作的 URL 进行编码。

    最后一部分的意思是,如果你在同一个 servlet 容器中部署两个不同的 webapp,并且同一个用户,使用同一个浏览器,使用这两个应用程序,他将有两个不同的会话:每个 webapp 一个会话。第一个 webapp 的 session 与第二个 webapp 的 session 完全隔离。

    【讨论】:

    • 感谢 JB 尼泽特。它带来了很多清晰。另一个问题,正如您所说,会话跟踪是使用 cookie 实现的。那么在这种情况下,当我们关闭第一个浏览器并打开第二个浏览器时,会话中的旧对象也应该可用于第二个浏览器请求,因为 cookie 通常不会在关闭浏览器时被删除?
    • 没有。会话 cookie 不是持久的。它们保留在 ion 内存中,并在浏览器退出时被遗忘。
    • 非常感谢。最后一个问题,如果我不关闭第一个浏览器并打开一个新浏览器怎么办。现在,在第一个请求期间放置的会话中的旧对象是否可用于第二个浏览器请求。
    • 每个浏览器都有一个会话。所以第二个浏览器的会话与第一个浏览器不同。
    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多