Новая HttpSession для каждого запроса?
-
17-09-2020 - |
Вопрос
Я всегда принимал как должное то, что JSESSIONID
файл cookie создается для каждого нового запроса для данного клиента при разработке приложений с использованием спецификации сервлета.Но, немного поразмыслив, не логичнее ли для контейнера сервлета создать только заголовок cookie после сеанс был запрошен и создан в коде?Для клиентов, у которых отключены файлы cookie, не приведет ли это в конечном итоге к созданию нового HttpSession
для каждого сделанного запроса?
Пожалуйста, дайте мне знать, если вопрос все еще неясен, чтобы я мог его отредактировать.ТИА.
Решение
Новый сеанс не будет создан контейнером сервлета по умолчанию, если только сервлет на самом деле не создаст его явно.Просто потому, что в заголовке заполняется JSEESIONID, это не означает, что на сервере должен быть seesion.Исключением из этого являются JSP, которые по умолчанию создают сеанс, если его там нет, если только <%@ сессия страницы="ложь" %>
Что касается того, что куки-файлы не включены:
Веб-контейнер может использовать несколько методов для связывания сеанса с пользователем, все из которых включают передачу идентификатора между клиентом и сервером.Идентификатор может храниться на клиенте в виде файла cookie, или веб-компонент может включать идентификатор в каждый URL-адрес, возвращаемый клиенту.
Если ваше приложение использует объекты session , вы должны убедиться, что отслеживание сеанса включено, заставив приложение переписывать URL-адреса всякий раз, когда клиент отключает файлы cookie.Вы делаете это , вызывая метод encodeURL(URL) ответа для всех URL-адресов , возвращаемых сервлетом.Этот метод включает идентификатор сеанса в URL -адрес только в том случае, если файлы cookie отключены;в противном случае он возвращает URL -адрес без изменений.