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

когда / каковы условия, когда - Это?

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

5 ответов


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

сеансы для каждого контекста:

SRV.7.3 Рамках Сессии

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

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

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


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

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

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

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

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

<%@ page session="false" %>

вы можете отключить параметр JSESSIONID по JSP.


коррекция: пожалуйста, проголосуйте за ответ Петр Štibraný - это более правильный и полный!

" JSESSIONID " - это уникальный идентификатор http-сеанса -смотрите javadoc здесь. В javadoc вы найдете следующее предложение: "информация о сеансе ограничена только текущим веб-приложением (ServletContext), поэтому информация, хранящаяся в одном контексте, не будет непосредственно видна в другом."

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

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

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


остерегайтесь, если ваша страница включает в себя другие .jsp or .jspf, который (фрагмент)! Если вы не установите

<%@ page session="false" %>

на них ТАКЖЕ Родительская страница в конечном итоге начнет новый сеанс и установит файл cookie JSESSIONID.

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

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

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


для ссылок, созданных в JSP с пользовательскими тегами, я должен был использовать

<%@ page session="false" %>

в JSP

и

request.getSession().invalidate();

в действие Struts