Файл cookie JSESSIONID создается / отправляется при создании сеанса. Сессия создается, когда ваш код звонит request.getSession()
или request.getSession(true)
впервые. Если вы просто хотите получить сеанс, но не создавать его, если он не существует, используйте request.getSession(false)
- это вернет вам сеанс или null
. В этом случае новый сеанс не создается, а файл cookie JSESSIONID не отправляется. (Это также означает, что сеанс не обязательно создается по первому запросу ... вы и ваш код контролируете время создания сеанса)
Сессии для каждого контекста:
SRV.7.3 Session Scope
Объекты HttpSession должны быть ограничены на уровне приложения (или контекста сервлета). Базовый механизм, такой как файл cookie, используемый для установления сеанса, может быть одинаковым для разных контекстов, но указанный объект, включая атрибуты в этом объекте, никогда не должен совместно использоваться контекстами контейнером.
( Сервлет 2.4, спецификация )
Обновление: каждый вызов страницы JSP неявно создает новый сеанс, если сеанса еще нет. Это можно отключить с помощью session='false'
директивы page, в этом случае переменная сеанса вообще не доступна на странице JSP.
request.getSession()
илиrequest.getSession(true)
, то вы получите либо существующий, либо новый сеанс. Однако, если ваш код вызываетrequest.getSession(false)
, вы получаете либо существующий сеанс, либо ноль, если сеанс не существует.Вот некоторая информация об еще одном источнике
JSESSIONID
куки:Я просто отлаживал некоторый код Java, который работает на сервере Tomcat. Я не звонил
request.getSession()
явно нигде в моем коде, но заметил, чтоJSESSIONID
cookie все еще устанавливается.Наконец, я взглянул на сгенерированный код Java, соответствующий JSP, в рабочем каталоге под Tomcat.
Кажется, что, нравится вам это или нет, если вы вызываете JSP из сервлета,
JSESSIONID
будет создан!Добавлено: я только что нашел это, добавив следующую директиву JSP:
Вы можете отключить настройку
JSESSIONID
с помощью JSP.источник
ИСПРАВЛЕНИЕ: Пожалуйста, проголосуйте за ответ Питера Штибрана - он более правильный и полный!
«JSESSIONID» - это уникальный идентификатор сессии http - см. Javadoc здесь . Там вы найдете следующее предложение
Поэтому, когда вы впервые заходите на сайт, создается новый сеанс и привязывается к SevletContext. При развертывании нескольких приложений сеанс не будет использоваться совместно.
Вы также можете сделать недействительным текущий сеанс и, следовательно, создать новый. например, при переключении с http на https (после входа в систему) очень хорошая идея - создать новый сеанс.
Надеюсь, что это ответ на ваш вопрос.
источник
Остерегайтесь, если ваша страница содержит другие .jsp или .jspf (фрагмент)! Если вы не установите
на них родительская страница в конечном итоге начнет новый сеанс и установит файл cookie JSESSIONID.
В частности, для страниц .jspf это происходит, если вы настроили свой файл web.xml с таким фрагментом:
чтобы включить скриптлеты внутри них.
источник
Для ссылок, созданных в JSP с пользовательскими тегами, мне пришлось использовать
в JSP
И
в действии Struts
источник