HTTP es un protocolo sin datos de estado. Cada conexión de mensaje de solicitud y respuesta es independiente de todas las demás. Esto significativo, porque entre solicitud y solicitud (del mismo usuario) el servidor HTTP no conserva una referencia a la solicitud anterior. Por tanto, el contenedor web debe establecer un mecanismo para almacenar la información de sesión de un usuario determinado.
Las sesiones constituyen un mecanismo para almacenar datos específicos del cliente a lo largo de diversas solicitudes HTTP.

Cada cliente recibe un identificador de sesión único que el contenedor web utiliza para identificar el objeto de sesión de ese usuario.
API DE HTTPSESSION
La especificación de Servlet proporciona una interfaz HttpSession que permite almacenar atributos de sesión. Puede almacenar, recuperar y eliminar atributos del objeto de sesión. El servlet tiene acceso al objeto de sesión con el método getSession del objeto HttpServletRequest.

CREAR UNA SESION
La interfaz HttpServletRequest también tiene un método getSession(boolean). Si llama a este método con un argumento true, se crea un objeto de sesión nuevo si aún no existía. Si llama a este método con un argumento false, se devuelve null si aún no existía una sesión. Podemos considerar que llamar al método getSession() equivale a llamar a getSession(true).
|
1 |
HttpSession sesion = request.getSession(); |
ALMACENAMIENTO DE ATRIBUTOS DE SESIÓN
A través del método setAttribute(nombre, valor) podemos almacenar datos (atributos) en el contexto de sesion.
|
1 |
sesion.setAttribute("carrito", miCarro); |
Estos atributos permanecerán todo el tiempo que dure la sessión. La diferencia con los atributos almacenados en la petición (request) es que estos solo existen hasta que se complete la respuesta en el cliente.
ACCESO A ATRIBUTOS DE SESIÓN
Para recuperar los atributos de la sesión utilizamos el método getAttribute(nombre). Esto nos devuelve un Object por lo cual habrá que hacer el casting al tipo de dato adecuado.
|
1 2 |
miCarro = new Carrito(); sesion.setAttribute("carrito", miCarro); |
DESTRUCCIÓN DE LA SESIÓN
Cuando la aplicación web completa una sesión, el controlador puede destruir (efectivamente) la sesión con el método invalidate.
Hay otros dos mecanismos para destruir una sesión, ambos gestionados por el contenedor web.
- Puede configurar un parámetro de tiempo de espera en el descriptor de despliegue. El valor del elemento session-timeout debe ser un número entero que represente el número de minutos que puede durar una sesión si el usuario la ha dejado
- El segundo mecanismo le permite controlar la longitud del intervalo de inactividad para un objeto de sesión específico. Puede utilizar el método setMaxInactiveInterval para cambiar el intervalo de inactividad (en segundos) del objeto de sesión.