为什么tomcat的后续响应不包含JSESSIONID?

时间:2015-10-08 06:18:18

标签: java session tomcat cookies

即便对我来说,提出这个问题似乎很奇怪,因为它与我最初的理解相矛盾。

问题

Tomcat在第一个请求(request1)上创建jsessionid,并将响应(response1-with JSessionID)发送到客户端。并且客户端在下一个请求(request2-with JSessionID)上通过cookie将相同的内容发送到服务器。现在服务器知道这是在同一个会话上并响应,但响应不包含JSessionID(response2-没有JSessionID)。

所以现在客户端没有获得任何JSessionID,所以来自该客户端的下一个请求似乎是服务器的新请求,因此服务器创建另一个会话,这是错误的

相对帖子

尝试解决方案

解决方案1 ​​

将请求中的所有Cookie添加到响应中 - IT工作,但我认为这是tomcat的工作。

// Add cookies from request
Cookie[] cookies = req.getCookies();
if(cookies != null){
    for (int i = 0; i < cookies.length; i++) {
        resp.addCookie(cookies[i]);
    }
}

解决方案2

从会话启动到会话销毁时从客户端添加JSessionID cookie(无论服务器是否在响应中发送会话ID) - 但这是一种解决方法,因为客户端不在实时控制。

问题 - ?

很明显,tomcat通过cookie或URL重写或隐藏表单字段维护基于JSessionID的会话。我没有像禁用cookie那样的特殊情况。现在的问题是

  • 为什么我的tomcat不会在后续响应中发送JSessionID?
  • 如果这是正常行为,tomcat如何保持会话完整性?
  • 或者客户有责任将JSessionId cookiee发送到服务器,直到cookiee过期?

感谢您抽出时间帮助我.. :)

0 个答案:

没有答案