2 minute read

5.3.11. Seguimiento de sesiones

SetContentType. Proporciona un valor a la cabecera Content-Type y se debe usar en la mayoría de los Servlets.

SetContentLength. Permite asignar un valor a la cabecera Content-Length.

Advertisement

AddCookie. Asigna un cookie a la respuesta.

SendRedirect. Además de asignar el código de estado 302, como hemos visto, asigna la dirección a la que se redirige el usuario en la cabecera Location .

5.3.11. Seguimiento de sesiones

HTTP es un protocolo sin estado, lo cual significa que cada petición es totalmente independiente de la precedente, de manera que no podemos vincular dos peticiones consecutivas entre sí. Esto resulta catastrófico si deseamos usar la web para algo más que visualizar documentos. Si estamos desarrollando una aplicación de comercio electrónico como una tienda en línea, debemos tener un control sobre los productos que ha ido seleccionando nuestro cliente para que al llegar a la pantalla de pedido tengamos una lista de la compra correcta. Al llegar a esta pantalla, ¿cómo obtenemos la lista de los objetos seleccionados para comprar?

Existen tres aproximaciones a este problema:

1. Usar cookies. Las cookies son pequeños pedazos de información que el servidor envía al navegador y que éste le reenvía cada vez que accede al sitio web. A pesar de tener un magnífico soporte de cookies, utilizar esta técnica para realizar un seguimiento de la sesión sigue siendo una tarea engorrosa:

• Controlar el cookie que contiene el identificador de sesión. • Controlar la expiración de este. • Asociar lo almacenado en el cookie con información de una sesión.

2. Reescritura de URL. Podemos utilizar la URL para añadir alguna información adicional que identifique la sesión. Esta solución pre-

senta la ventaja de que funciona con navegadores en los que no hay soporte de cookies o en los que éste está desactivado. Sin embargo, sigue siendo un sistema engorroso:

• Debemos asegurarnos de que todas las URL que lleguen al usuario contengan la información de sesión adecuada.

• Dificulta que el usuario anote las direcciones en su libreta de direcciones (bookmarks), pues éstas contendrán información de sesión caducada.

3. Campos ocultos en los formularios. Podemos usar los campos de tipo HIDDEN de los formularios de HTML para propagar la información que nos interese. Evidentemente adolece de los mismos problemas que las anteriores soluciones.

Afortunadamente, el API de Servlets nos facilita una solución a este problema. Los Servlets proporcionan un API, HttpSession, de alto nivel que gestiona sesiones. La gestión la realiza mediante cookies y reescritura de URL. Esta API aísla al autor de los Servlets de los detalles de la gestión de sesiones.

Nota

En versiones anteriores a la 2.2 del API de Servlets, las funciones de acceso a la información de sesión eran: getValue y setValue. Obtener la sesión asociada a la petición

Para obtener la sesión asociada a la petición HTTP en curso disponemos de un método getSession de la clase HttpServletRequest. Si existe una sesión, dicho método nos retorna un objeto de tipo HttpSession. En caso de no existir, nos devolverá null . Podemos llamar a getSession usando un parámetro adicional que, en caso de que la sesión no existiese, la crease automáticamente.

HttpSession sesion = request.getSession(true);

Acceder a la información asociada

Los objetos HttpSession que representan la información asociada a una sesión nos permiten almacenar en su interior una serie de valores con nombre. Para leer estos valores disponemos de getAttribute, mientras que para modificarlos contamos con setAttribute.

This article is from: