Está en la página 1de 29

Instituto Politécnico Nacional

Escuela Superior de Cómputo


Ingeniería en Sistemas Computacionales

Unidad temática II

Seguimiento de una Sesión

M. en C. Sandra Ivette Bautista Rosales


Web Application Development
Seguimiento de una sesión
HTTP es un protocolo sin estado; por lo tanto cada
petición es tratada de forma independiente por el
servidor. Por lo tanto, el servidor no sabe si una serie
de peticiones provienen del mismo o de diferentes
clientes y si además, están relacionadas entre sí. Esto
presenta muchos problemas, por ejemplo, cuando
un usuario hace una compra a través de una página
web y añade uno y otro articulo al carrito, entonces
¿Cómo recordará el servidor lo que el usuario ha
agregado?

2
Seguimiento de una sesión
• Las sesiones se usan para identificar y guardar
información individual de cada cliente.
• Una sesión se inicia después de que el cliente
realice una petición al servidor para utilizar alguno
de sus servicios, y expira cuando pase un tiempo
sin que el cliente realice otra petición, o bien
cuando se cierra el cliente, aunque también es
posible cancelarla ejecutando el código adecuado
(invalidate de HttpSession).

3
Seguimiento de una sesión
• Para llevar el seguimiento del cliente
correctamente existen tres soluciones típicas a este
problema:
• Cookies
• Reescritura del URL
• Campos ocultos en los formularios
• Los servlets proporcionan una solución construida
sobre cookies y la reescritura del URL, a través de la
interfaz HttpSession.

4
Cookies
• Una cookie es una pequeña cantidad de
información que un servlet puede crear y
almacenar en la máquina cliente y posteriormente,
consultar a través de la API de cookies de los
servlets.

5
Cookies
• Las cookies son una de las soluciones más utilizadas
para realizar el seguimiento de una sesión.
Utilizando este mecanismo, el contenedor web
envía una cookie al cliente (por ejemplo, con un
identificador de sesión), la cual será retornada sin
modificar por el cliente automáticamente por cada
nueva petición que éste haga al servidor, asociando
la petición del servicio de modo inequívoco con una
sesión.

6
Cookies
• En el caso del carrito de compras, podemos utilizar
cookies para almacenar el identificador del cliente
para poder identificar en el servidor los artículos
comprados por éste; de esta forma, cada petición
subsiguiente podrá obtener información de la
anterior.
• La clase Cookie del paquete javax.servlet.http es
para que podamos trabajar con cookies.

7
Cookies
• Existen ciertos aspectos importantes que se deben
controlar:
• Extraer la cookie que almacena el identificador de sesión
entre todas las cookies, ya que puede haber varias.
• Seleccionar un tiempo de expiración apropiado para la
cookie.
• Asociar la información del servidor con el identificador
de sesión
• Hay información que no debe ser almacenada en
los cookies como los datos bancarios del usuario,
por mencionar un ejemplo.
8
Cookies
• Una cookie se compone de dos partes: un nombre
y un valor; el nombre la identifica entre las demás
cookies almacenadas en el cliente y el valor es un
dato asociado con la cookie.
• Para crear una cookie, un servlet tiene que invocar
al constructor de la clase Cookie pasando como
argumentos su nombre y el valor asociado:

Cookie miCookie = new Cookie(“nombreCookie”, ”valorAsociado”);

9
Cookies
• Una vez que el servlet crea la cookie, debe
agregarla a las cabeceras de la respuesta HTTP. Para
ello hay que invocar al método addCookie del
objeto HttpServletResponse pasando como
argumento la cookie que se desea añadir:
Response.addCookie (miCookie);

• Las cookies que ya existan en el cliente no son


afectadas por el método addCookie

10
Cookies
• El tamaño de una cookie esta limitado a 4KB y la
mayoría de los navegadores limitan el espacio total
de almacenamiento a 2MB, por lo que este método
puede hacer que se eliminen otras cookies; es el
navegador el que decide cuándo eliminar las
cookies dependiendo del espacio de
almacenamiento.

11
Cookies
• Para leer una cookie invocamos al método
getCookies del objeto HttpServletRequest el cual
devuelve una matriz de objetos Cookie.
Cookie cookies[] = request.getCookies();

• Las cookies que un cliente almacena para un


servidor solo pueden ser devueltas a ese mismo
servidor. Por lo tanto, los servlets que se ejecutan
dentro de un servidor comparten las cookies.

12
Cookies
• El servlet puede recorrer la matriz de cookies y
recuperar los atributos mediante los métodos
getName el cual devuelve un objeto String con el
nombre de la cookie y getValue que devuelve el
valor asociado:
String nombre, valor;
for (int i=0; i < cookies.length; ++i)
{
nombre = cookies[i].getName();
valor = cookies[i].getValue();
System.out.println(nombre +“ -> ” + valor);
}

13
Ejemplo “CuentaCookie.java”

14
Ejemplo “CuentaCookie.java”

15
Ejemplo “CuentaCookie.java”

16
Reescritura del URL
• Reescribir un URL significa añadir al final del mismo
alguna información extra que identifique la sesión.
Entonces, el servidor puede asociar ese
identificador con los datos que ha almacenado
sobre la sesión.
http://www.myserver.com/registro/index.html;idsesion=123
• Esta es una buena solución y funciona bien con
navegadores viejos que no soportan cookies o que
las tienen desactivadas, sin embargo, tiene casi los
mismos problemas que las cookies.

17
Parámetros ocultos en los
formularios
• Un parámetro oculto es un control de entrada de
tipo hidden. En este caso no se muestra ningún
campo de entrada de datos al usuario, pero el par
variable valor especificado es enviado junto con el
formulario.
<input type=“hidden” name=“variable” value=“valor” >
• Se suelen utilizar para mantener datos durante una
sesión, el inconveniente es que solo funciona
cuando las páginas se generan dinámicamente, ya
que cada sesión tiene un único identificador.

18
Sesiones
• Para permitir dar seguimiento a las sesiones, los
servlets proporcionan la API HttpSession. Cuando
un usuario accede por primera vez a un sitio web,
le es asignado un objeto HttpSesion nuevo y un
identificador único utilizado para emparejar el ID
del usuario y el objeto HttpSession en sucesivas
peticiones.
• La interfaz HttpSession se ha construido sobre las
cookies y la reescritura del URL.

19
Sesiones
• Para realizar el seguimiento de
una sesión con servlets
debemos:
• Obtener la sesión (un objeto
HttpSesion) correspondiente a un
usuario determinado.
• Almacenar datos u obtenerlos del
objeto HttpSession.
• Cancelar la sesión (de ser
necesario).

20
Obtener una sesión
• Para obtener la sesión correspondiente a un
usuario, simplemente hay que invocar al método
getSession del objeto HttpServletRequest. Este
método tiene un parámetro de tipo bool que vale
true por omisión. En este caso, el método retorna
la sesión actual asociada con la petición; si la
petición no tiene una sesión asociada crean una
nueva. Si el parámetro tiene valor de false y la
petición no tiene una sesión asociada, el método
retorna null.
HttpSession sesion = request.getSession();
21
Datos asociados con una sesión
• Un objeto HttpSession se crea en el servidor y es
asociado automáticamente con la petición actual.
Este objeto tiene una escritura de datos que
permite almacenar un número de claves y sus
valores asociados.
• Una clave es un atributo de la sesión.
• Para leer el valor de un atributo, hay que invocar al
método getAttribute del objeto HttpSession (la
sesión).

22
Datos asociados con una sesión
• Para recuperar el nombre de todos los atributos se
utiliza el método getAttributeNames y necesita un
objeto Enumeration.
• El ejemplo “SeguimientoSesion” hace un
seguimiento del número de veces que el cliente
accede al servlet y obtiene algunos atributos de la
sesión iniciada, como su identificador, cuándo fue
creada y cuándo fue accedida por última vez.

23
Datos asociados con una sesión
• En el siguiente ejemplo, se obtiene la sesión de la
petición actual y recupera de ella el valor del
atributo que guarda la cuenta actual, para después
actualizarlo incrementándolo en una unidad
(podemos guardar como atributo cualquier objeto,
para cuando lo necesitemos entre petición y
petición, recuperarlo; por ejemplo, un HashMap de
objetos que represente, por ejemplo, un carrito de
compras).

24
Ejemplo “SeguimientoSesion.java”

25
Ejemplo “SeguimientoSesion.java”

26
Ejemplo “SeguimientoSesion.java”

“Cuenta.prueba” es otro
atributo que se agregó a
la sesión para mostrar
más elementos

27
Cancelar una sesión
• Una sesión normalmente expira automáticamente
después de un tiempo de inactividad, o cuando es
explícitamente cancelada por un servlet.
• Cuando la sesión es cancelada, todos los datos
mantenidos por el objeto sesión son eliminados del
sistema. Algunos de los métodos son:
public void invalidate()
• Este método finaliza inmediatamente la sesión.
Todos los objetos almacenados en la sesión son
destruidos.
28
Cancelar una sesión

public long getCreationDate()


• Este método retorna la fecha de cuándo fue creada
la sesión (milisegundos transcurridos desde el 1 de
enero de 1970).
public long getLastAccessedTime()
• Este método retorna la fecha (milisegundos) de
cuándo el cliente envió la última petición asociada
con esta sesión.

29

También podría gustarte