【发布时间】:2012-02-27 16:12:57
【问题描述】:
我有一个非常基本的问题,如何创建 HTTPSession 问题存在。但是我问这个问题是有原因的:-
我知道 httpsession 是 Web 浏览器独有的,当我们第一次执行 HttpServletRequest.getSession 时,服务器会创建它。它将保持相同的会话,直到我们 关闭浏览器。但我有一点不同的场景。我在一个 tomcat 实例上有一个 Web 应用程序说 T1。在这个 Web 应用程序的欢迎页面上 我提供了两个点击链接,将我带到另一个tomcat实例T2上托管的不同Web应用程序的相同java servlet(S1)(这两个链接 打开两个单独的弹出窗口)。现在首先我单击链接 1 并检查 S1 中的 sessionId 并找到它的值为 1678。现在首先我单击链接 2 并 检查 S1 中的 sessionId 并再次找到它的值 1678。我的问题是为什么我得到的两个请求的会话 ID 相同 从链接1和链接2?我该怎么做才能为这两个请求获得不同的会话?
我在网上寻找可能的解决方案后尝试了什么:-点击链接1,在 Servlet S1 中,我复制了会话属性,使其无效并创建新的。 假设新会话 id 是 8765 。现在我单击链接 2 并在此请求中找到相同的会话。所以我进一步使其无效并创建新的(比如说 新会话 ID 为 4897)。理想情况下,它应该使第一个浏览器会话过期(单击链接 1 时生成)。为了验证它,我点击弹出窗口 1 上的任何地方,它没有得到 已过期,但我再次看到上次生成的会话 ID,即 4897。我不明白为什么它在两个弹出窗口中附加相同的会话 ID?
各位,感谢您抽出宝贵时间阅读这篇冗长的剧本?
编辑:-
Cookie[] cookies = req.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
context.getResponse().getHttpServletResponse().addCookie(cookies[i]);
}
HttpSession myAppSession = req.getSession();//line 1
假设点击链接 1 我得到会话 id 为 1234,然后点击链接 2 后我也得到相同的会话 id。根据我的理解,在执行上面第 1 行的代码后,我应该得到不同的会话 ID,因为我在获取会话之前将 MaxAge 设置为 0。但它没有发生?
【问题讨论】:
标签: java session web-applications tomcat servlets