Это дубликат этого вопроса , но этому вопросу более 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, и я не могу понять, что он делает.
Вот грубая диаграмма, чтобы проиллюстрировать, чтопроисходит:
Любая помощь будет оценена.