Разница между 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

Изменить:

Кто-то отметил / пометил мой вопрос как повторяющийся, хотя это не так. Я объясню почему.

Я прямо попросил разницы между request.getSession() & request.getSession(true) и НЕ между request.getSession(true) и request.getSession(false)! Я заявил, опять же прямо, что я уже понимаю разницу между ч / б ..(true) и ..(false).

Вопрос, связан как возможный дубликат вопросов о разница ч / б ..(true) & ..(false), а не ..(true) & ..()


person Ali Khan    schedule 22.06.2015    source источник
comment
Все 3 ответа верны, похожи и полезны, однако первым ответил @Jan.   -  person Ali Khan    schedule 22.06.2015
comment
возможный дубликат Разница между request.getSession (). getId () и request .getSession (ложь)?   -  person Krutik Jayswal    schedule 23.06.2015
comment
@KrutikJayswal Вы вообще ПРОЧИТАЛИ мой вопрос, прежде чем отметить его? Я ЯВНО заявил, что НЕ спрашиваю о разнице между ..Session (true) и ..Session (false)! или (неявно) ч / б ..Session () & ..Session (false)! Я спросил о разнице между ..Session () и ..Session (true)! на что получил вполне разумные ответы! На что я пометил свой вопрос [РЕШЕНО] !!!   -  person Ali Khan    schedule 24.06.2015
comment
@Sotiros Почему ты отредактировал мой вопрос?   -  person Ali Khan    schedule 24.06.2015


Ответы (7)


request.getSession() - это просто метод удобства. Он делает то же самое, что и request.getSession(true).

person Jan    schedule 22.06.2015

request.getSession() вернет текущий сеанс. если текущий сеанс не существует, то будет создан новый.

request.getSession(true) вернет текущий сеанс. Если текущий сеанс не существует, то будет создан новый сеанс.

Таким образом, в основном нет разницы между обоими методами.

request.getSession(false) вернет текущий сеанс, если текущий сеанс существует. В противном случае он не создает новый сеанс.

person Ranjitsinh    schedule 22.06.2015
comment
Это создаст новый сеанс, если текущий сеанс нулевой, а мы этого не хотим. Если текущий сеанс нулевой, немедленно выйдите из системы. - person Arun; 09.03.2018
comment
Приведенный выше ответ легко понять. Спасибо! - person deadend; 29.03.2020

Метод с логическим аргументом:

  request.getSession(true);

возвращает новую сессию, если сессия не связана с запросом

  request.getSession(false);

возвращает null, если сеанс не связан с запросом.

Метод без логического аргумента:

  request.getSession();

возвращает новый сеанс, если сеанс не связан с запросом, и возвращает существующий сеанс, если сеанс связан с запросом. Он не возвращает null.

person Ruby Kannan    schedule 22.06.2015

Оба они возвращают одно и то же, как указано в связанной документации; объект HttpSession.

Вы также можете взглянуть на конкретную реализацию (например, Tomcat) и увидеть, что он на самом деле делает: Request.java. В этом случае в основном они оба вызывают:

Session session = doGetSession(true);
person mike    schedule 22.06.2015

Основным практическим отличием является его использование:

в security scenario, где нам всегда нужен новый сеанс, мы должны использовать request.getSession(true).

request.getSession(false): will return null if no session found.
person Community    schedule 14.09.2017

request.getSession(true) и request.getSession() делают одно и то же, но если мы используем request.getSession(false), он вернет null, если объект сеанса еще не создан.

person stephan obwins    schedule 16.10.2016

request.getSession () или request.getSession (true) оба вернут только текущий сеанс. если текущий сеанс не существует, он создаст новый сеанс.

person NPE    schedule 25.08.2016