Новая сессия всегда создается при использовании getSession () - PullRequest
0 голосов
/ 11 июня 2018

Это дубликат этого вопроса , но этому вопросу более 4 лет, и он не имеет принятого ответа.Я предложу вознаграждение за этот вопрос, если он не получит ответа.

В моем веб-приложении J2EE у меня есть 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) возвращает действительный сеанс с правильным идентификатором, который соответствует значениюфайла cookie JSESSIONID предоставляется вместе с запросом.Просто, когда сервер отвечает, у него всегда есть заголовок Set-Cookie, установленный на совершенно новый JSESSIONID, и я не могу понять, что он делает.

Вот грубая диаграмма, чтобы проиллюстрировать, чтопроисходит:

Problem workflow

Любая помощь будет оценена.

...