Подтвердить что ты не робот

Java HttpSession

Является ли HttpSession в Java-сервлете только после

HttpSession s = request.getSession();

?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Прочтите JavaDocs, он четко говорит:

В этом выражается request.getSession()

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

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

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

Если create is false и запрос не имеет допустимого HttpSession, этот метод возвращает null.

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


Update

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

см

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

Ответ 3

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

Ответ 4

Чтобы сделать это:

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

Ответ 5

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