当请求来自网络服务器而不是网络浏览器时,如何创建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。但是它没有发生吗?

回答:

我认为这是您要寻找的

默认情况下, 。 。并且,

它基于这些参数。如果 :

  1. 发出请求的域名。根据您的情况验证两个实例的域名是否相同
  2. 如果路径名相同。Web Server将上下文根作为路径发送,相同上下文根下的请求共享cookie。
  3. 服务器发送给定的cookie是否安全。这意味着,该cookie是否可以在非安全通道上发送。

这些参数将使浏览器将cookie发送到服务器。 。

如果请求之间的请求属性(例如请求URI,域和路径(即上下文根))相同,则无法告诉浏览器使用不同的cookie。

  1. 使用不同的域名。
  2. 使用不同的上下文根。
  3. 在两个节点的前面有一个LB,然后根据会话ID重定向到正确的节点

以上是 当请求来自网络服务器而不是网络浏览器时,如何创建HTTPSession? 的全部内容, 来源链接: utcz.com/qa/402490.html

回到顶部