Java HttpSession - PullRequest
       6

Java HttpSession

13 голосов
/ 28 февраля 2011

HttpSession в сервлете Java создается только после

HttpSession s = request.getSession();

В моем коде я этого не писал, но когда я использую if (request.getSession(false) == null) ..., это не работает. Почему?

Ответы [ 5 ]

17 голосов
/ 28 февраля 2011

HttpSession создается при вызове request.getSession ().

Но Если вы обращаетесь к JSP по умолчанию, он автоматически создает сеанс. Это поведение можно отключить с помощью:<%@ page session="false">

Вы используете JSP?

15 голосов
/ 28 февраля 2011

Прочитайте JavaDocs, он ясно говорит:

Это говорит, request.getSession ()

Возвращает текущий сеанс, связанный с этим запросом, или еслиу запроса нет сеанса, он создается.

И другой вариант request.getSession (isCreate)

Возвращает текущий HttpSession, связанный с этим запросом или, если текущий сеанс отсутствуети create - true, возвращает новый сеанс.

Если create - false, а в запросе отсутствует действительный HttpSession, этот метод возвращает ноль.

Чтобы убедиться, что сеансправильно поддерживается, вы должны вызвать этот метод, прежде чем ответ будет зафиксирован.Если контейнер использует куки-файлы для поддержания целостности сеанса, и ему предлагается создать новый сеанс после подтверждения ответа, генерируется исключение IllegalStateException.


Обновление

В небольшом исследовании я обнаружил, что сессия не создана, если не вызывается request.getSession() где .Поскольку, The servlet container uses this interface to create a session between an HTTP client and an HTTP server. Есть хорошие шансы, что ваш контейнер сервлетов создаст для вас Session по умолчанию.

см.:

  1. Java Doc HttpSession
  2. Обсуждение JavaRaunch: автоматически ли создается HttpSession?

Но, чтобы быть более безопасным, используйте request.getSession() для получения сеанса и используйтеrequest.getSession(false) только когда вам нужно проверить, был ли сеанс уже создан.

3 голосов
/ 28 февраля 2011

В дополнение к примечанию к ответу Нишанта, сеанс может быть неявно создан страницами JSP, если вы не настроили их на создание сеанса с <%@ page session = "false" %>.

1 голос
/ 02 ноября 2012

Для завершения:

  • сеанс не создается, если вы не вызовете request.getSession(), в вашем сервлете используйте request.getSession(false), чтобы получить существующий сеанс без создания нового сеанса
  • если вы используете страницу JSP, для вас автоматически создается сессия - переменная session - если вы не укажете <%@ page session="false" %>
  • , даже если ваш сеанс создается автоматически, вы можете использовать session.isNew(), чтобы узнать, был ли он создан недавно
0 голосов
/ 28 февраля 2011

Попробуйте удалить сеансовые куки из браузера и сделать еще один тест.Если это не работает, какой-то другой компонент создает новый сеанс перед этим вызовом.

...