使用getSession()时始终会创建新会话

时间:2018-06-11 14:30:21

标签: java session cookies session-cookies jsessionid

这是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,我无法弄清楚是做什么的。

这是粗略的图表,用于说明正在发生的事情:

Problem workflow

任何帮助都将不胜感激。

0 个答案:

没有答案