这是this question的副本,但该问题已超过4年,并且没有接受答案。如果它没有得到答案,我会从这个问题中提供赏金。
在我的J2EE Web应用程序中,我有Filter
名为AlwaysCreateSessionFilter
。这是我的doFilter
方法:
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) {
if (request instanceof HttpServletRequest) {
((HttpServletRequest) request).getSession();
}
chain.doFilter(request, response);
}
在这场战争的web.xml
中,我有:
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
浏览器始终正确地包含JSESSIONID
cookie,其中包含服务器最新响应的值(在响应的Set-Cookie
标头中提供)。但问题是服务器始终在JSESSIONID
标头中为Set-Cookie
提供全新值,而不是与请求一起提供的值。所以服务器正在为每个请求创建一个新会话。
我在doFilter
方法中设置了一个断点,并且可以确认request.getSession(false)
返回一个有效会话,其中包含与提供的JSESSIONID
cookie值相对应的正确ID请求。只是,当服务器响应时,它总是将Set-Cookie
标头设置为全新的JSESSIONID,我无法弄清楚是做什么的。
这是粗略的图表,用于说明正在发生的事情:
任何帮助都将不胜感激。