HTTP Session
HTTP Session
Su funcionamiento es el siguiente: cada vez que un usuario crea una sesión accediendo
a una página (que la genere) se crea un objeto a nivel de Servidor con un HashMap vacío
que nos permite almacenar la información que necesitamos relativa a este usuario.
Realizado este primer paso se envía al navegador del usuario una Cookie que sirve para
identificarle y asociarle el HashMap que se acaba de construir para que pueda almacenar
información en él. Este HashMap puede ser accedido desde cualquier otra página
permitiéndonos compartir información.
Usuarios y Sessiones
El concepto de Session es individual de cada usuario que se conecta a nuestra aplicación y la
información no es compartida entre ellos. Así pues cada usuario dispondrá de su propio
HashMap en donde almacenar la información que resulte útil entre páginas.
Métodos
Para invalidarla automáticamente, la sesión expira cuando transcurre el tiempo indicado por el
método getMaxInactiveInterval() entre dos accesos del cliente (en segundos)
Long getCreationTime() Returns the time when this session was created, measured in
milliseconds since midnight January 1, 1970 GMT.
Long getLastAccessedTime() Returns the last time the client sent a request associated with
this session, as the number of milliseconds since midnight January 1, 1970 GMT, and marked
by the time the container received the request.
Int getMaxInactiveInterval() Returns the maximum time interval, in seconds, that the servlet
container will keep this session open between client accesses.
El primer método obtiene la sesión actual, o crea una si no existe. Con el segundo método
podemos establecer, mediante el flag booleano, si queremos crear una nueva si no existe (true)
o no (false). Si la sesión es nueva, el método isNew() del HttpSession devuelve true, y la sesión
no tiene ningún dato asociado. Deberemos ir añadiéndole datos tras crearla.
Para mantener la sesión de forma adecuada, debemos llamar a getSession() antes de que se
escriba nada en la respuesta HttpServletResponse (y si utilizamos un Writer, debemos
obtenerla antes de obtener el Writer, no antes de escribir datos).