English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Diferencias entre request.getSession(true, false, null) en Java

java request.getSession(true/false/diferencias entre (null)

I. Razones de la necesidad

En la realidad, a menudo nos encontramos con lo siguiente3Uso en:

HttpSession session = request.getSession();

HttpSession session = request.getSession(true);

HttpSession session = request.getSession(false);

II. Diferencias

1.      El documento oficial de Servlet dice:

public HttpSession getSession(boolean create)
Devuelve la sesión de HttpSession asociada con esta solicitud o, si no hay sesión actual y create es verdadero, devuelve una nueva sesión.
Si create es false y la solicitud no tiene una HttpSession válida, este método devuelve null.
Para asegurarse de que la sesión se mantenga adecuadamente, debe llamar a este método antes de que se comprometa la respuesta. Si el Contenedor utiliza cookies para mantener la integridad de la sesión y se le pide que cree una nueva sesión cuando se comprometa la respuesta, se lanza una excepción IllegalStateException.
Parámetros: true -para crear una nueva sesión para esta solicitud si es necesario; false para devolver null si no hay sesión actual
Devuelve: la HttpSession asociada con esta solicitud o null si create es false y la solicitud no tiene una sesión válida

2. La traducción significa:

getSession(boolean create) significa devolver la HttpSession actual del reqeust, si la HttpSession actual del reqeust es null y create es true, se crea una nueva sesión, de lo contrario se devuelve null;

En resumen:

HttpServletRequest.getSession(true) es equivalente a HttpServletRequest.getSession(); 
HttpServletRequest.getSession(false) es equivalente a si la sesión actual no existe, se devuelve null; 

3. Utilizar

Cuando se almacena o recupera información de inicio de sesión en la sesión, se recomienda generalmente: HttpSession session = request.getSession();

Cuando se obtiene información de inicio de sesión desde la sesión, se recomienda generalmente: HttpSession session =request.getSession(false);

4. Una forma más concisa

Si tu proyecto utiliza Spring, las operaciones de sesión son mucho más fáciles. Si necesitas obtener un valor de la sesión, puedes usar el método WebUtils.getSessionAttribute(HttpServletRequestrequest, String name) de la herramienta WebUtils (org.springframework.web.util.WebUtils), aquí está el código fuente:

public static Object getSessionAttribute(HttpServletRequest request, String name){ 
  Assert.notNull(request, "Request must not be null"); 
  HttpSession session = request.getSession(false); 
  return (session != null63; session.getAttribute(name) : null); 
}

Nota: Assert es una herramienta del paquete de herramientas de Spring, utilizada para realizar algunas operaciones de validación, en este ejemplo se utiliza para determinar si reqeust está vacío y lanzar una excepción en caso de que esté vacío

Cuando uses:

WebUtils.setSessionAttribute(request, "user", User);
User user = (User)WebUtils.getSessionAttribute(request, "user");

Gracias por leer, espero que pueda ayudar a todos, gracias por el apoyo a nuestro sitio!

Te gustará