即便对我来说,提出这个问题似乎很奇怪,因为它与我最初的理解相矛盾。
问题
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那样的特殊情况。现在的问题是
感谢您抽出时间帮助我.. :)