Является ли HttpSession в Java-сервлете только после
HttpSession s = request.getSession();
?
В моем коде я этого не писал, но когда я использую if (request.getSession(false) == null) ...
, он не работает. Почему?
Является ли HttpSession в Java-сервлете только после
HttpSession s = request.getSession();
?
В моем коде я этого не писал, но когда я использую if (request.getSession(false) == null) ...
, он не работает. Почему?
HttpSession создается при вызове request.getSession().
Но если вы получаете доступ к JSP по умолчанию, он автоматически создаст сеанс. Это поведение можно отключить, используя: <%@ page session="false">
Используете ли вы JSP?
Прочтите 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)
только тогда, когда вам нужно проверить, был ли уже создан сеанс.
В дополнение к ответу Nishant обратите внимание, что сеанс может быть создан неявно с помощью JSP-страниц, если вы не настроили их на создание сеанса с <%@ page session = "false" %>
.
Чтобы сделать это:
request.getSession()
, в свой сервлет, используйте request.getSession(false)
для получения существующего сеанса без создания нового сеансаsession
- если вы не укажете <%@ page session="false" %>
session.isNew()
, чтобы узнать, был ли он вновь созданПопробуйте удалить cookie сеанса из браузера и выполнить другой тест. Если он не работает, то другой компонент создает новый сеанс перед этим вызовом.