Httpsession适用于每个用户或每个浏览器?

时间:2011-12-08 18:02:17

标签: http web-applications tomcat servlets

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

现在我的问题:

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

  2. 如果我没有关闭浏览器并在新的标签/窗口中点击网址,我之前提交的会话中的对象是否可用?

  3. The HttpSession javadoc说以下内容:

      

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

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

    javadoc还说:

      

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

    如果是这种情况,我们在会话中设置的任何对象应该对所有用户请求都可见,甚至从不同的机器发出,因为每个Web服务器都有servlet上下文。但是,如果应用程序范围不在会话范围内,则情况确实如此。我没有得到它在这里想说的话。

2 个答案:

答案 0 :(得分:3)

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

会话跟踪是使用Cookie实现的,但如果浏览器不接受Cookie,则可以回退到URL重写。但是,这需要开发人员一丝不苟,并始终使用适当的方法或标签来编码应用程序的每个链接和操作的URL。

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

答案 1 :(得分:1)

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

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

当然,行为会发生变化。

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