当请求来自网络服务器而不是网络浏览器时,如何创建HTTPSession?
我有一个非常基本的问题,即HTTPSession的创建是如何工作的。我知道你们会因为存在类似问题而解雇我。但是有理由我问这个问题,这里是:-
我知道httpsession对于Web浏览器是唯一的,服务器在第一次执行HttpServletRequest.getSession时会创建它,它将保持相同的会话,直到我们关闭浏览器为止。但是我有一些不同的情况。我在一个tomcat实例上有一个Web应用程序,例如T1。在此Web应用程序的欢迎页面上,我提供了两个链接,单击它们可以将我带到托管的不同Web应用程序的同一个Java
servlet(S1)在另一个tomcat实例T2上(这两个链接打开了两个单独的弹出窗口)。现在,我首先单击link1并检查S1中的sessionId,然后将其值查找为1678。现在,我首先单击link2并检查S1中的sessionId,然后再次将其值查找为1678。
单击Servlet
S1中的link1,我复制了会话属性,使其无效并创建一个新的会话属性。假设新的会话ID为8765。现在,我单击link2并在此请求中也找到了相同的会话。所以我进一步使它无效并创建一个新的(例如,新的会话ID为4897)。理想情况下,它应该使第一个浏览器会话(在单击link1时生成)过期。为了验证它,我在弹出窗口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。但是它没有发生吗?
回答:
我认为这是您要寻找的 :
默认情况下, 。 。并且,
。
它基于这些参数。如果 :
- 发出请求的域名。根据您的情况验证两个实例的域名是否相同
- 如果路径名相同。Web Server将上下文根作为路径发送,相同上下文根下的请求共享cookie。
- 服务器发送给定的cookie是否安全。这意味着,该cookie是否可以在非安全通道上发送。
这些参数将使浏览器将cookie发送到服务器。 。
如果请求之间的请求属性(例如请求URI,域和路径(即上下文根))相同,则无法告诉浏览器使用不同的cookie。
- 使用不同的域名。
- 使用不同的上下文根。
- 在两个节点的前面有一个LB,然后根据会话ID重定向到正确的节点
以上是 当请求来自网络服务器而不是网络浏览器时,如何创建HTTPSession? 的全部内容, 来源链接: utcz.com/qa/402490.html