Servlet – Seguimiento de sesión

Los servlets son los programas Java que se ejecutan en el servidor web o en el servidor de aplicaciones habilitado para Java. Se utilizan para manejar la solicitud obtenida del servidor web, procesar la solicitud, producir la respuesta y luego enviar una respuesta al servidor web.

HTTP es un protocolo «sin estado», lo que significa que cada vez que un cliente solicita una página web, el cliente establece una nueva conexión con el servidor web y el servidor no realiza un seguimiento de las requests anteriores.

  • La conversión de un usuario durante un período de tiempo se denomina sesión . En general, se refiere a un cierto período de tiempo.
  • El registro del objeto en sesión se conoce como seguimiento .
  • El seguimiento de sesiones es el proceso de recordar y documentar las conversiones de los clientes a lo largo del tiempo. La gestión de sesiones es otro nombre para ello.
  • El término » aplicación web con estado » se refiere a una aplicación web que es capaz de recordar y registrar las conversiones de los clientes a lo largo del tiempo.

¿Por qué se requiere el seguimiento de sesiones?

  • Debido a que el protocolo HTTP no tiene estado, requerimos el seguimiento de sesiones para que la relación cliente-servidor tenga estado.
  • El seguimiento de sesiones es importante para realizar un seguimiento de las conversiones en compras en línea, aplicaciones de correo y aplicaciones de comercio electrónico.
  • El protocolo HTTP no tiene estado, lo que implica que cada solicitud se trata como una nueva. Como se puede ver en la imagen de abajo.

Eliminación de datos de sesión

Tenemos numerosas alternativas una vez que haya terminado de procesar los datos de la sesión de un usuario.

  1. Eliminar un atributo específico Puede eliminar el valor asociado con una clave específica llamando a la función pública void removeAttribute(String name).
  2. Elimina toda tu sesión. Para eliminar una sesión completa, utilice la función public void invalidate().
  3. Configuración del tiempo de espera de la sesión Puede configurar el tiempo de espera para una sesión por separado llamando a la función pública void setMaxInactiveInterval(intervalo int).
  4. Cierre la sesión del usuario En los servidores que admiten servlets 2.4, puede utilizar el método de cierre de sesión para cerrar la sesión del cliente del servidor web e invalidar todas las sesiones de los usuarios.
  5. Configuración web.xml Si está utilizando Tomcat, puede configurar el tiempo de espera de la sesión en el archivo web.xml, además de las formas enumeradas anteriormente.
<session-config>
  <session-timeout>20</session-timeout>
</session-config>

El tiempo de espera se especifica en minutos y anula el tiempo de espera predeterminado de Tomcat de 30 minutos.

En un servlet, la función getMaxInactiveInterval() proporciona el tiempo de espera de la sesión en segundos. GetMaxInactiveInterval() devuelve 900 si su sesión está configurada en 20 minutos en web.xml.

El seguimiento de sesiones emplea cuatro técnicas diferentes

  1. Galletas
  2. Campo de formulario oculto
  3. Reescritura de URL
  4. Sesión Http

A. Galletas

Las cookies son pequeños fragmentos de datos entregados por el servidor web en el encabezado de respuesta y guardados por el navegador. Un servidor web puede asignar a cada cliente web una ID de sesión única. Las cookies se utilizan para mantener la sesión activa. El cliente puede desactivar las cookies.

B. Campo de formulario oculto

La información se inserta en las páginas web a través del campo de formulario oculto, que luego se transfiere al servidor. Estos campos están ocultos a la vista del usuario.

Ilustración :

<input type = hidden'  name = 'session' value = '12345' >

C. Reescritura de URL

Con cada solicitud y devolución, agregue algunos datos más a través de la URL como parámetros de solicitud. La reescritura de URL es una mejor técnica para mantener sincronizadas la administración de sesiones y las operaciones del navegador.

D. Sesión Http

Una sesión de usuario está representada por el objeto HttpSession. Se establece una sesión entre un cliente HTTP y un servidor HTTP utilizando la interfaz HttpSession. Una sesión de usuario es una colección de datos sobre un usuario que abarca muchas requests HTTP.

Ilustración:

HttpSession session = request.getSession( );
Session.setAttribute("username", "password");

La solicitud debe hacerse. Antes de enviar el contenido de cualquier documento al cliente, primero debe llamar a getSession(). La siguiente es una lista de los métodos más significativos proporcionados por el objeto HttpSession:

Método

Descripción

getAttribute de objeto público (nombre de la string) Este método devuelve el objeto en esta sesión enlazado con el nombre proporcionado, o nulo si ningún objeto está enlazado con el nombre.
Enumeración pública getAttributeNames() Esta función devuelve una Enumeración de objetos String con los nombres de todos los elementos asociados con esta sesión.
getCreationTime público largo() Este método devuelve los milisegundos desde la medianoche del 1 de enero de 1970 GMT, cuando se creó esta sesión.
string pública getId() Esta función devuelve una string que contiene la identificación única de la sesión.
getLastAccessedTime público largo() Esta función devuelve el tiempo accesible más reciente de la sesión en milisegundos desde la medianoche del 1 de enero de 1970 GMT.
público int getMaxInactiveInterval() Esta función devuelve el intervalo de tiempo máximo (segundos) durante el cual el contenedor de servlets mantendrá abierta la sesión entre requests de clientes.
nulidad pública invalidar() Esta función desvincula cualquier objeto conectado a esta sesión y la invalida.
público booleano esNuevo() Si el cliente desconoce la sesión o decide no unirse a ella, esta función devuelve verdadero.
removeAttribute public void (nombre de la string) El objeto enlazado con el nombre proporcionado se elimina de esta sesión mediante este método.
public void setAttribute (nombre de la string, valor del objeto) Esta función utiliza el nombre proporcionado para vincular un objeto a esta sesión.
public void setMaxInactiveInterval(intervalo int) Esta función define el intervalo entre las requests de los clientes antes de que el contenedor de servlet invalide esta sesión en segundos.

Implementación: muestra cómo obtener la creación y las horas de último acceso para una sesión mediante el objeto HttpSession. Si la solicitud aún no tiene una sesión asociada, crearemos una.

A. Archivo: GfgSession.java

Java

// Java Program to Illustrate Creation and last-accessed
// Times for a Session
 
// Import required java libraries
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class GfgSession extends HttpServlet {
 
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
 
        // Create a session object if it is already not
        // created.
        HttpSession session = request.getSession(true);
 
        // Get session creation time.
        Date createTime
            = new Date(session.getCreationTime());
 
        // Get last access time of this web page.
        Date lastAccessTime
            = new Date(session.getLastAccessedTime());
 
        String title = "Welcome Back to geeksforgeeks";
        Integer visitCount = new Integer(0);
        String visitCountKey = new String("visitCount");
        String userIDKey = new String("userID");
        String userID = new String("GFG");
 
        // Check if this is new comer on your web page.
        if (session.isNew()) {
            title = "Welcome to GeeksForGeeks";
            session.setAttribute(userIDKey, userID);
        }
        else {
            visitCount = (Integer)session.getAttribute(
                visitCountKey);
            visitCount = visitCount + 1;
            userID
                = (String)session.getAttribute(userIDKey);
        }
        session.setAttribute(visitCountKey, visitCount);
 
        // Set response content type
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
 
        String docType
            = "<!doctype html public \"-//w3c//dtd html 4.0 "
              + "transitional//en\">\n";
 
        out.println(
            docType + "<html>\n"
            + "<head><title>" + title + "</title></head>\n"
            +
 
            "<body bgcolor = \"#f0f0f0\">\n"
            + "<h1 align = \"center\">" + title + "</h1>\n"
            + "<h2 align = \"center\">Gfg Session Information</h2>\n"
            + "<table border = \"1\" align = \"center\">\n"
            +
 
            "<tr bgcolor = \"#949494\">\n"
            + "  <th>Session info</th><th>value</th>"
            + "</tr>\n"
            +
 
            "<tr>\n"
            + "  <td>id</td>\n"
            + "  <td>" + session.getId() + "</td>"
            + "</tr>\n"
            +
 
            "<tr>\n"
            + "  <td>Creation Time</td>\n"
            + "  <td>" + createTime + "  </td>"
            + "</tr>\n"
            +
 
            "<tr>\n"
            + "  <td>Time of Last Access</td>\n"
            + "  <td>" + lastAccessTime + "</td>"
            + "</tr>\n"
            +
 
            "<tr>\n"
            + "  <td>User ID</td>\n"
            + "  <td>" + userID + "</td>"
            + "</tr>\n"
            +
 
            "<tr>\n"
            + "  <td>Number of visits</td>\n"
            + "  <td>" + visitCount + "</td>"
            + "</tr>\n"
            + "</table>\n"
            + "</body>"
            + "</html>");
    }
}

B. Archivo: web.xml

XML

<web-app>
<servlet>
   <servlet-name>GfgSession</servlet-name>
   <servlet-class>GfgSession</servlet-class>
</servlet>
 
<servlet-mapping>
   <servlet-name>GfgSession</servlet-name>
   <url-pattern>/GfgSession</url-pattern>
</servlet-mapping>
</web-app>

Compile el servlet SessionTrack descrito anteriormente y agréguelo al archivo web.xml. Cuando ejecuta http://localhost:8080/SessionTrackingGfg/GfgSession por primera vez, debería obtener el siguiente resultado:

Producción:

Si intentamos ejecutar el mismo servlet nuevamente, obtendremos el siguiente resultado.

Publicación traducida automáticamente

Artículo escrito por sanketnagare y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *