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