Сеансы поддерживаются куки-файлом HTTP.При первом создании сеанса в заголовке ответа будет установлен файл cookie.По умолчанию файлы cookie привязаны только к определенному контексту.
Таким образом, если вы перенаправите файл, пока файл cookie еще не установлен, сеанс будет потерян.Чтобы обойти это, вам необходимо закодировать URL-адрес перенаправления.
response.sendRedirect(response.encodeRedirectURL(url));
Это добавляет к URL-адресу идентификатор jsessionid
, который позволяет сервлет-контейнеру находить нужный сеанс без помощи файла cookie.
Если вам не нравится jsessionid
, подумайте о реализации фильтра, подобного this , который гарантирует, что клиент узнает о куки-файле сессии до того, как запрос поступит в ваш контроллер, гдезапустить перенаправление.
Кроме того, если вы перенаправите в другой контекст, он не сможет получить доступ к тому же сеансу.Чтобы обойти это, вам нужно настроить контейнер сервлетов для совместного использования сеанса между контекстами.Например, в Tomcat проверьте атрибут emptySessionPath
элемента <Connector>
в /conf/server.xml
.