Está en la página 1de 11

18/04/2012

Servlet y gestin de sesiones


AEJ MCPD. C. Cecilia Wiesse Lpez

Qu es el Seguimiento de Sesin?

Hay una serie de problemas que surgen del hecho de que HTTP es un protocolo stateless". En particular, cuando usted est haciendo compras on-line, es una molestia real que el servidor Web no puede recordar fcilmente transacciones anteriores. Esto hace que aplicaciones como los carros de compras sean problemticas. Al pasar de la pgina donde se especifique lo que desea comprar (almacenada en un servidor Web normal) a la pgina que lleva su nmero de tarjeta de crdito y direccin de envo (alojado en el servidor seguro que utiliza SSL), cmo recuerda el servidor lo que hemos comprado?

MCPD. C Cecilia Wiesse

18/04/2012

Soluciones tpicas para mantener la informacin

Las cookies
Reescritura de URL Campos ocultos de formulario. Los servlets proporcionan una solucin tcnica: el HttpSession API. Se trata de una interfaz de alto nivel basado en las cookies y la reescritura de URL.

MCPD. C Cecilia Wiesse

Soluciones tpicas para mantener la informacin

Las cookies
- Puede utilizar cookies HTTP para almacenar informacin sobre una sesin de compras, y cada conexin subsiguiente puede mirar para arriba la sesin actual y luego extraer informacin acerca de esa sesin desde una ubicacin en el equipo servidor

A tener en cuenta:
- Las cookies no son un grave problema de seguridad.

- Los navegadores slo permiten 20 cookies por sitio web y 300 en total.
- Limitadas a 4kb. - Pueden ser un problema de privacidad.

MCPD. C Cecilia Wiesse

18/04/2012

Uso de Cookie

La clase Cookie de java facilita su creacin y manejo:

MCPD. C Cecilia Wiesse

Atributo de la cookie

Se modifican mediante alguno de sus mtodos:


- getComment/setComment: Comentarios asociados a la cookie. - getDomain/setDomain: Indicar el dominio al que se aplica la cookie. Por defecto la cookie se devuelve a la misma direccin que la envi - getMaxAge/setMaxAge: Indicar el tiempo que debe pasar en segundos hasta que la cookie expire. Si no se indica la cookie dura una sesin. - getName/setName: Indicar el nombre de la cookie.

- getPath/setPath: Indica a que rutas responde la cookie.


- getValue/setValue: Indicar el valor de la cookie. - getVersion/setVersion: Indicar con que version del protocolo funciona esta cookie.

MCPD. C Cecilia Wiesse

18/04/2012

Evaluacin de las Cookies

Ventajas
- No son directamente visibles por el usuario, como lo es la reescritura de URL o campo oculto. - No requieren uso de formulario.

Desventajas
- El usuario puede decidir no usar la cookie - Algunos navegadores no lo soportan.

MCPD. C Cecilia Wiesse

Ejemplo de cookie

Servlet

MCPD. C Cecilia Wiesse

18/04/2012

Ejemplo de cookie

Web

MCPD. C Cecilia Wiesse

Soluciones tpicas para mantener la informacin

Reescritura de URL Se agregan parmetros en la URL que permiten realizar un seguimiento de la sesin. Desventajas:
- Existe un lmite al nmero de caracteres en la URL

- La informacin es visible en el navegador.


- Se requiere codificar caracteres especiales(Ej. &,? Y blanco)

Para administrar a los usuarios se usa como clave de seguimiento el UID (user ID)

MCPD. C Cecilia Wiesse

10

18/04/2012

Soluciones tpicas para mantener la informacin

No dependen de la configuracin del navegador, pero es tedioso y propenso a errores.


- Hay que codificar todas las URLs que se devuelvan al cliente.

El contenedor web proporciona el servicio de generacin de identificadores y codificacin de URL a travs del mtodo encodeURL(String url) de HttpServletResponse.

MCPD. C Cecilia Wiesse

11

Soluciones tpicas para mantener la informacin

Campos ocultos de formulario Mediante el uso de formulario s HTML y campos ocultos se puede mantener la sesin desde programacin. No existe ningn tipo de ayuda por parte del contenedor para implementar este mecanismo. El programador debe generar los campos ocultos e incluso en el cuerpo de la respuesta y leerlos de la siguiente peticin. Esto tiene algunos problemas:
- Informacin aun es accesible viendo el cdigo fuente. - Se est limitando al uso de formularios de datos

Campo oculto se usa para indicar en cual pgina se encuentra el usuario.


MCPD. C Cecilia Wiesse

12

18/04/2012

Seguimiento de sesin

Los servlets proporcionan una solucin tcnica: La API HttpSession.


Una interfaz de alto nivel construida sobre los cookies y la reescritura de las urls (pero transparente para el desarrollador). Permite almacenar objetos. Buscar el objeto HttpSession asociado a una peticin:
- Se usa el mtodo getSession() de HttpServletRequest que devuelve null si no hay una sesin asociada. - Entonces podramos crear una pero al ser una tarea sumamente comn, se pasa true y l mismo se encarga de crear una.

MCPD. C Cecilia Wiesse

13

Interfaz HttpSession

MCPD. C Cecilia Wiesse

14

18/04/2012

Aadir y recuperar informacin de una SESION

getAttribute(nombre_variable)
- Devuelve una instancia de Object en caso de que la sesin ya tenga algo asociado a la etiqueta nombre_variable - null en caso de que no se haya asociado nada an.

setAttribute(nombre_variable, referencia )
- Coloca el objeto referenciado por referencia en la sesin del usuario bajo el nombre nombre_variable. A partir de este momento, el objeto puede ser recuperado por este mismo usuario en sucesivas peticiones. Si el objeto ya existiera, lo sobrescribe.

getAttributesNames()
- Retorna una Enumeration con los nombres de todos los atributos establecidos en la sesin del usuario.
MCPD. C Cecilia Wiesse

15

getId().
- Devuelve un identificador nico generado para cada sesin.

isNew().
- True si el cliente (navegador) nunca ha visto la sesin. False para sesin preexistente.

getCreationTime().
- Devuelve la hora, en milisegundos desde 1970, en la que se creo la sesin.

getLastAccessedTime().
- La hora en que la sesin fue enviada por ltima vez al cliente.

MCPD. C Cecilia Wiesse

16

18/04/2012

Trabajando con sesion

Obtenemos la sesin:
- HttpSession sesion = request.getSession( true ); - El argumento true (o sin argumento) indica que si no hay sesin, entonces se crea. Si utilizamos el argumento false, request.getSession( false ), entonces si no existe la sesin no crea una nueva y devuelve null.

MCPD. C Cecilia Wiesse

17

Trabajando con sesion

Introduce y lee datos a la sesion

MCPD. C Cecilia Wiesse

18

18/04/2012

Trabajando con sesion

Borrar e invalidar
Podemos borrar atributos de la sesin: sesion.removeAttribute( "login"); sesion.removeAttribute( "apellido");

MCPD. C Cecilia Wiesse

19

Ejemplo Session

Servlet

MCPD. C Cecilia Wiesse

20

10

18/04/2012

HTML

MCPD. C Cecilia Wiesse

21

11