Раньше я не уделял этому много внимания, когда учился, но сегодня вернулся и внимательно изучил жизненный цикл сессии. Сессии хранятся на серверной стороне, и обычно чтобы предотвратить их попадание в память сервера (для высокоскоростного доступа), Sessinon создаёт процесс при первом доступе пользователя к серверу.Обратите внимание, что только доступ к JSP, Servlet и другим программам создаёт сессию, а доступ к статическим ресурсам, таким как HTML и IMAGE, не создаёт сессию.
Когда заканчивается сессия?
1. Сервер очищает сессию из памяти сервера, которая долгое время была неактивна, и сессия становится недействительной. Стандартное время окончания сессии в Tomcat составляет 20 минут.
2. Вызовите метод аннулирования сессии.
Требования к сессиям для браузеров:
Хотя сессия хранится на сервере и прозрачна для клиента, её нормальная работа всё равно требует поддержки браузера клиента. Это связано с тем, что Session должен использовать файлы cookie в качестве идентификатора. HTTP-протокол не имеет состояния, и сессию нельзя оценить по HTTP-соединению, чтобы определить, является ли это одним и тем же клиентом, поэтому сервер отправляет cookie с названием JSESSIONID в браузер клиента, который имеет значение идентификатора сессии (то есть возвращаемое значение HttpSession.getId()). Session использует файл cookie, чтобы определить, является ли это одним и тем же пользователем.
Этот файл cookie автоматически генерируется сервером, а его атрибут maxAge обычно равен -1, что означает, что он валиден только в текущем браузере, не используется между окнами браузера и не будет валиден при закрытии браузера. Таким образом, когда два окна браузера на одном устройстве получают доступ к серверу, генерируются две разные сессии. За исключением новых окон, открываемых ссылками, скриптами и т.д. внутри браузера (то есть не окон, открывающихся двойным кликом по иконкам браузера рабочего стола и т.д.). Эти дочерние окна используют куки родительского окна и, следовательно, сессию.
Примечание: Новые сессии генерируются в недавно открытых окнах браузера, за исключением подокон. Дочернее окно разделяет сессию родительского окна. Например, если кликнуть правой кнопкой мыши по ссылке и выбрать «Открыть в новом окне» в меню ярлыков, дочернее окно может получить доступ к сессии родительского окна.
Что если браузер клиента отключает файлы cookie или не поддерживает файлы cookie? Например, подавляющее большинство мобильных браузеров не поддерживают файлы cookie. Java Web предлагает ещё одно решение: переписывание URL-адресов. Переписывание URL-адресов — это решение для клиентов, которые не поддерживают файлы cookie. Принцип переписывания URL-адреса заключается в переписке ID-информации сессии пользователя на URL-адрес. Сервер может парсировать переписанный URL, чтобы получить идентификатор сессии. Таким образом, даже если клиент не поддерживает cookie, сессия может быть использована для записи состояния пользователя. Класс HttpServletResponse предоставляет encodeURL (String url) для реализации переписывания URL-адреса, что автоматически определяет, поддерживает ли клиент cookie. Если клиент поддерживает cookie, URL будет выведен как есть. Если клиент не поддерживает cookie, идентификатор пользовательской сессии перезаписывается в URL.
Примечание: TOMCAT определяет, поддерживает ли клиентский браузер файлы cookie, исходя из того, включено ли файл cookie в запрос. Хотя клиент может поддерживать файлы cookie, поскольку при первом запросе файлы cookie не передаются (ведь таких файлов cookie нет), переписанный URL-адрес всё равно будет содержать jsessionid в адресе. Сервер уже написал куки в браузере при втором визите, поэтому переписанный URL-адрес не будет содержать jsessionid в адресе.
|