Servlets y El Seguimiento de Sesiones
Servlets y El Seguimiento de Sesiones
Servlets y El Seguimiento de Sesiones
Cpsulas
Las sesiones son compartidas por los servlets a los que accede el cliente. Esto es
conveniente para aplicaciones compuestas por varios servlets. Para utilizar el
seguimiento de sesin debemos:
Cpsulas
// Si el usuario no cre una sesin hasta ahora se crea un objeto Usuario nuevo
// con los datos recibidos (por ejemplo)
if (miuser == null) {
miuser = new Usuario(response.getParameter(nombre),
response.getParameter(apellidos)
response.getParameter(edad));
session.putValue(session.getId(), miuser);
}
...
}
}
Como un objeto puede ser asociado con una sesin, el ejemplo anterior autentica al
usuario, para ello comprueba si ha iniciado sesin anteriormente viendo si el objeto
asociado a la sesin es nulo o no. En caso de serlo crear la sesin con un nuevo
objeto Usuario cuyos datos los recuperar con la instruccin getParameter del
objeto HttpServletResonse.
Una sesin puede ser designada como nueva. Una sesin nueva hace que el
mtodo isNew de la clase HttpSession devuelva true, indicando que, por
ejemplo, el cliente, todava no sabe nada de la sesin. Una nueva sesin no tiene
datos asociados.
Invalidar la Sesin
Cpsulas
...
miUser = (Usuario)session.getValue(session.getId());
...
// Borra todos los datos del usuario e invalida la sesin.
session.invalidate();
Por ejemplo, el siguiente servlet devuelve un catalogo con dos enlaces para cada
libro. Un enlace ofrece detalles sobre el libro y el otro ofrece al usuario aadir el
libro a su hoja de pedidos. Ambas URLs son reescritas:
Cpsulas
out.println("<html>" + ...);
...
"<a href=\"" +
response.encodeUrl("/servlet/bookdetails?bookId=" +
bookId) +
"\"> <strong>" + books[i].getTitle() +
" </strong></a></td>" + ...
"<a href=\"" +
response.encodeUrl("/servlet/catalog?Buy=" + bookId)
+ "\"> Add to Cart </a></td></tr>" +
}
}
}
Si el usuario pulsa sobre un enlace con una URL re-escrita, el servlet reconoce y
extrae el ID de sesin. Luego el mtodo getSession utiliza el ID de sesin para
obtener el objeto HttpSession del usuario.
Por otro lado, si el navegador del usuario no soporta cookies y el usuario pulsa
sobre una URL no re-escrita, se pierde la sesin de usuario. El servlet
contactado a travs de ese enlace crea una nueva sesin, pero la nueva sesin no
tiene datos asociados con la sesin anterior. Una vez que un servlet pierde los
datos de una sesin, los datos se pierden para todos los servlets que comparten la
sesin. Debemos utilizar la re-escritura de URLs consistentemente para que nuestro
servlet soporte clientes que no soportan o aceptan cookies.