Вопрос-ответ

Under what conditions is a JSESSIONID created?

При каких условиях создается JSESSIONID?

Когда / при каких условиях создается JSESSIONID?

Относится ли это к домену? Например, если у меня есть сервер приложений Tomcat и я развертываю несколько веб-приложений, будет ли создаваться другой JSESSIONID для каждого контекста (веб-приложения) или он является общим для всех веб-приложений, пока они находятся в одном домене?

Переведено автоматически
Ответ 1

Файл cookie JSESSIONID создается / отправляется при создании сеанса. Сеанс создается при первом вызове вашего кода request.getSession() или request.getSession(true). Если вы просто хотите получить сеанс, но не создавать его, если он не существует, используйте request.getSession(false) - это вернет вам сеанс или null. В этом случае новый сеанс не создается, и файл cookie JSESSIONID не отправляется. (Это также означает, что сеанс не обязательно создается по первому запросу... вы и ваш код контролируете, когда создается сеанс)

Сеансы зависят от контекста:


SRV.7.3 Область действия сеанса


Область действия объектов HttpSession должна быть ограничена на уровне приложения (или контекста сервлета). Базовый механизм, такой как файл cookie, используемый для установления сеанса, может быть одинаковым для разных контекстов, но объект, на который ссылается этот объект, включая атрибуты в этом объекте, никогда не должен использоваться контейнером совместно с контекстами.


(Спецификация сервлета 2.4)

Обновление: Каждый вызов страницы JSP неявно создает новый сеанс, если сеанса еще нет. Это можно отключить с помощью session='false' директивы page , и в этом случае переменная session вообще недоступна на странице JSP.

Ответ 2

Вот некоторая информация еще об одном источнике JSESSIONID cookie:

Я просто отлаживал некоторый Java-код, который выполняется на сервере tomcat. Я не вызывал request.getSession() явно нигде в своем коде, но я заметил, что JSESSIONID cookie все еще устанавливается.

Я, наконец, взглянул на сгенерированный Java-код, соответствующий JSP, в рабочем каталоге Tomcat.

Похоже, нравится вам это или нет, но если вы вызовете JSP из сервлета, JSESSIONID будет создан!

Добавлено: я только что обнаружил это, добавив следующую директиву JSP:

<%@ page session="false" %>

вы можете отключить настройку JSESSIONID с помощью JSP.

Ответ 3

ИСПРАВЛЕНИЕ: Пожалуйста, проголосуйте за ответ Питера Штибраны - он более правильный и полный!

"JSESSIONID" - это уникальный идентификатор http-сеанса - смотрите javadoc здесь . Там вы найдете следующее предложение


Область действия информации о сеансе ограничена только текущим веб-приложением (ServletContext), поэтому информация, хранящаяся в одном контексте, не будет непосредственно видна в другом.


Итак, при первом посещении сайта создается новый сеанс, который привязывается к SevletContext . При развертывании нескольких приложений общий сеанс не используется.

Вы также можете сделать недействительным текущий сеанс и, следовательно, создать новый. например, при переключении с http на https (после входа в систему) очень хорошей идеей является создание нового сеанса.

Надеюсь, это ответ на ваш вопрос.

Ответ 4

Будьте осторожны, если ваша страница содержит other .jsp или .jspf (фрагмент)! Если вы не задали

<%@ page session="false" %>

в них родительская страница также в конечном итоге запустит новый сеанс и установит файл cookie JSESSIONID.

В частности, для страниц .jspf это происходит, если вы настроили свой web.xml с таким фрагментом:

<jsp-config>
<jsp-property-group>
<url-pattern>*.jspf</url-pattern>
</jsp-property-group>
</jsp-config>

для того, чтобы включить скриптлеты внутри них.

java