Ответ 1
request.getSession()
- просто удобный метод. Он делает то же самое, что и request.getSession(true)
.
Я понимаю разницу между request.getSession(true)
и request.getSession(false)
. Но request.getSession()
и request.getSession(true)
выглядят очень похожими!
Оба "возвращают текущий сеанс, связанный с этим запросом", но отличаются:
request.getSession()
:"или если запрос не имеет сеанса, создает один"
request.getSession(true)
:", если текущий сеанс отсутствует, возвращает новый сеанс"
Я не понимаю разницы между ними, не так ли (если они не существуют), они создают новый сеанс, но первый не возвращает, а второй делает?
Источник: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
Edit:
Кто-то помеченный/помеченный мой вопрос как дубликат, даже если это не так. Я объясню, почему.
Я прямо спросил разницу между request.getSession()
и request.getSession(true)
и НЕ между request.getSession(true)
и request.getSession(false)
! Я еще раз заявлял, что я уже понимаю разницу b/w ..(true)
и ..(false)
.
Вопрос связан как возможный дублированный вопрос о разности b/w ..(true)
и ..(false)
, а не ..(true)
и ..()
request.getSession()
- просто удобный метод. Он делает то же самое, что и request.getSession(true)
.
request.getSession()
вернет текущий сеанс. если текущий сеанс не существует, то он создаст новый.
request.getSession(true)
вернет текущий сеанс. Если текущий сеанс не существует, то он создаст новый сеанс.
Таким образом, в принципе нет разницы между обоими методами.
request.getSession(false)
вернет текущий сеанс, если текущий сеанс существует, а затем он не создаст новый сеанс.
Метод с логическим аргументом:
request.getSession(true);
возвращает новый сеанс, если сеанс не связан с запросом
request.getSession(false);
возвращает значение null, если сеанс не связан с запросом.
Метод без логического аргумента:
request.getSession();
возвращает новый сеанс, если сеанс не связан с запросом и возвращает существующий сеанс, если сеанс связан с запросом. Он не вернет null.
Оба они возвращают то же самое, что указано в документации, которую вы связывали; Объект HttpSession.
Вы также можете посмотреть конкретную реализацию (например, Tomcat) и посмотреть, что она на самом деле делает: Request.java. В этом случае в основном они оба называют:
Session session = doGetSession(true);
Основное практическое различие заключается в его использовании:
в security scenario
, где нам всегда нужен новый сеанс, мы должны использовать request.getSession(true)
.
request.getSession(false): will return null if no session found.
request.getSession() или request.getSession(true) возвращают только текущий сеанс. если текущий сеанс не будет существовать, он создаст новый сеанс.
request.getSession(true)
и request.getSession()
оба делают одно и то же, но если мы используем
request.getSession(false)
вернет null
, если объект сеанса еще не создан.