Sesiones de JSP


Una sesión es una serie de comunicaciones entre un cliente y un servidor en la que se realiza un intercambio de información. Por medio de una sesión se puede hacer un seguimiento de un usuario a través de la aplicación.


El tiempo de vida de una sesión comienza cuando un usuario se conecta por primera vez a un sitio web pero su finalización puede estar relacionada con tres circunstancias:


  • Cuando se abandona el sitio web.
  • Cuando se alcanza un tiempo de inactividad que es previamente establecido, en este caso la sesión es automáticamente eliminada. Si el usuario siguiera navegando se crearía una nueva sesión.
  • Se ha cerrado o reiniciado el servidor

  • En JSP las acciones que se pueden realizar sobre las sesiones se llevan a cabo mediante la interface HttpSession y los métodos que implementa. Esta interfaz está incluida dentro del paquete javax.servlet.http y es utilizada por el contenedor de páginas JSP para crear una sesión entre el servidor y el cliente.


    Para obtener la sesión de un usuario se utiliza el método getSession() que devuelve una interfaz de tipo HttpSession.


    <%
    HttpSession sesion=request.getSession();
    %>
    

    Para guardar un objeto en una sesión se utiliza el método setAttribute(), que ha sustituido al método putValue(). Este método utiliza dos argumentos:


  • El primero es el nombre que identificará a esa variable.
  • El segundo es el dato que se va a guardar.

  • Un ejemplo de cómo guardar una cadena de texto en la sesión:


    <%@page import="java.util.*" session="true" %>
    <%
    HttpSession sesion=request.getSession();
    sesion.setAttribute("trabajo","Paginas de JSP");
    %>
    

    Los datos que se guardan en la sesión permanecen ahí a la espera de ser utilizados. Para ello es necesario realizar el proceso contrario a cuando se graban, comenzando por la recuperación del objeto de la sesión para empezar a ser tratado.


    Para poder realizar este paso se utiliza el método getAttribute() (anteriormente se utilizaba el método getValue(), pero este método se encuentra en desuso), utilizando como argumento el nombre que identifica al objeto que se quiere recuperar.


    Un ejemplo de recuperación de objetos almacenados en la sesión:


    <%
    HttpSession sesion=request.getSession();
    Sesion.getAttribute("nombre");
    %>
    

    Como se ha visto, los datos almacenados por las sesiones pueden destruirse en tres casos:


  • El usuario abandona aplicación web (cambia de web o cierra el navegador)
  • Se alcanza el tiempo máximo permitido de inactividad de un usuario (timeout).
  • El servidor se para o se reincia.

  • Pero la situación más probable es querer iniciar las sesiones o dar por finalizada una si se ha cumplido una o varias condiciones. En este caso no es necesario esperar a que ocurra alguno de los tres casos citados anteriormente, ya que mediante el método invalidate() es posible destruir una sesión concreta.


    En el siguiente caso la sesión "sesion" se destruye al invocar el método invalidate(); y por la tanto el valor u objeto que está asociado a la misma.


    <%
    [...]
    sesion.invalidate();
    %>