Desarrollo de la gestión de sesiones en servlets

Acerca de esta tarea

Esta información, combinada con el ejemplo de codificación SessionSample.java, proporciona un modelo de programación para implementar sesiones en sus propios servlets.

Procedimiento

  1. Obtenga el objeto HttpSession.

    Para obtener una sesión, utilice el método getSession del objeto javax.servlet.http.HttpServletRequest en la API de Java™ Servlet 3.0.

    Cuando obtenga por primera vez el objeto HttpSession, el recurso Gestión de sesiones usa uno de los tres procedimientos para establecer el rastreo de la sesión: utilizar cookies, volver a escribir el URL o información de SSL (Secure Sockets Layer).
    Deprecated feature Deprecated feature: El seguimiento de sesiones utilizando el ID de SSL está en desuso en WebSphere Application Server versión 7.0. Puede configurar el rastreo de sesiones para utilizar cookies o modificar la aplicación para utilizar la reescritura de URL.depfeat

    Imagine que el recurso Gestión de sesiones utiliza cookies. En tal caso, el recurso Gestión de sesiones crea un ID de sesión exclusivo y lo envía al navegador como una cookie. Cada solicitud posterior de este usuario (en el mismo navegador) pasa la cookie que contiene el ID de sesión y el recurso Gestión de sesiones utiliza este ID para buscar el objeto HttpSession actual del usuario.

    En el Paso 1 del ejemplo de código, el valor booleano (create) se ha establecido en true para que se cree el objeto Httpsession si aún no existe. (Con la API de Servlet 2.3 y posterior, el método javax.servlet.http.HttpServletRequest.getSession() sin booleanos toma true de forma predeterminada y crea una sesión si todavía no existe una para este usuario.)

  2. Almacene y recupere los datos definidos por el usuario en la sesión.

    Después de establecer una sesión, puede añadir y recuperar datos definidos por el usuario para la sesión. El objeto HttpSession dispone de métodos similares a los de java.util.Dictionary para añadir, recuperar y eliminar objetos Java arbitrarios.

    En el paso 2 del ejemplo de código, el servlet lee un objeto entero de HttpSession, lo incrementa y lo vuelve a escribir. Puede utilizar cualquier nombre para identificar valores en el objeto HttpSession. El código de ejemplo usa el nombre sessiontest.counter.

    Puesto que el objeto HttpSession es compartido por servlets a los que el usuario puede acceder, considere seguir un convenio de denominación en el ámbito del sitio para evitar conflictos.

  3. (Opcional) Genere una salida de página de respuesta de HTML que contenga datos del objeto HttpSession.
  4. Informe al usuario de que ha tenido lugar una acción durante la sesión. Es aconsejable transferir el código HTML al navegador del cliente, que indica que se ha producido la acción. Por ejemplo, en el paso 3 del ejemplo de código, el servlet genera una página web que se devuelve al usuario y visualiza el valor de sessiontest.counter cada vez que el usuario visita la página web durante la sesión.
  5. (Opcional) Notifique a los usuarios conectados. Se notifica acerca de los objetos almacenados en una sesión que implementan la interfaz javax.servlet.http.HttpSessionBindingListener cuando la sesión está preparándose para su finalización y se invalida. Este aviso le permite efectuar procesos posteriores a la sesión como, por ejemplo, guardar permanentemente en una base de datos los cambios realizados durante la sesión.
  6. Finalice la sesión. Se puede finalizar una sesión:
    • Automáticamente con el recurso Gestión de sesiones, si la sesión ha estado inactiva durante un tiempo especificado. Los administradores proporcionan una manera de especificar el período de tiempo después del cual se ha de invalidar una sesión.
    • Codificando el servlet para que llame al método invalidate() en el objeto de sesión.

Ejemplo

import java.io.*; 
import java.util.*; 
import javax.servlet.*;
import javax.servlet.http.*;


public class SessionSample  extends HttpServlet {
  public void doGet (HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {


   // Paso 1: obtener el objeto de sesión
 
      boolean create = true;         
      HttpSession session = request.getSession(create);
 
   // Paso 2: Obtener el valor de los datos de sesión


      Integer ival = (Integer)              
      session.getAttribute ("sessiontest.counter");         
      if (ival == null) ival = new Integer (1);         
      else ival = new Integer (ival.intValue () + 1);           
      session.setAttribute ("sessiontest.counter", ival);       

   // Paso 3: salida de la página

      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      out.println("<html>");
      out.println("<head><title>Prueba de rastreo de sesión</title></head>");
      out.println("<body>");
      out.println("<h1>Prueba de rastreo de sesión</h1>");
      out.println ("Ha obtenido esta página " + ival + " times" + "<br>");
      out.println ("Your " + request.getHeader("Cookie"));
      out.println("</body></html>");
   }
}

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprs_sesi
File name: tprs_sesi.html