Sunteți pe pagina 1din 4

Curso de Java Cpsulas Java y el manejo de cookies

Una de las formas ms sencillas de mantener informacin ante diversas sesiones es el uso de cookies. Una cookie es un modo muy simple de almacenar informacin bajo la forma de la vieja y til estructura "atributo:valor"; donde "atributo" corresponde al nombre de la cookie y "valor" al valor. Por ejemplo, la cookie "aniversario" puede expresarse bajo la forma "aniversario:18-12-2003". La idea es que una cookie almacena datos definidos por una aplicacin servidora (CGI o servlet). Estos datos se guardan en el cliente, concretamente en un archivo que suele contener el nombre del servidor. La ubicacin de este archivo dentro del cliente depende de la configuracin del sistema y del navegador. Normalmente el archivo est en el directorio Cookies, por ejemplo, en "C:\Documents and Settings\Administrador\Cookies".

Crear un Cookie
El constructor de la clase javax.servlet.http.Cookie crea un cookie con un nombre inicial y un valor. Se puede cambiar el valor posteriormente utilizando el mtodo setValue. El nombre del cookie debe ser un string (token) cuyo primer carcter no puede ser el carcter dollar ("$") ya que estn reservados segn la norma RFC 2109 del 3WC. El valor del cookie puede ser cualquier string, aunque no est garantizado que los valores null funcionen en todos los navegadores. Adems, si enviamos una cookie que cumpla con las especificaciones originales de las cookies de Netscape, no se deben utilizar carcteres blancos ni ninguno de estos caracteres: [ ] ( ) = , "" / ? @ : ; Si el servlet devuelve una respuesta al usuario con un Writer, debemos crear la cookie antes de acceder a Writer. (Porque las cookies se envan al cliente como una cabecera, y las cabeceras deben escribirse antes de acceder al Writer). Si el Servlet utilizar cookies para seguir la pista de un pedido, el servlet podra crear las cookies de esta forma:
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Comprueba si existe algn libro para aadir a la cesta de la compra String bookId = request.getParameter("Comprar"); // Si se quiere aadir un libro se puede aadir una cookie para indicar que ha comprado ya ese libro. Se creara en ese momento if (bookId != null) { Cookie getBook = new Cookie("Comprar", bookId); } // Aade el tipo de contexto antes de acceder a objeto Writer response.setContentType("text/html"); // Se crea el objeto PrintWrite para escribir los datos de respuesta. PrintWriter out = response.getWriter(); out.println("<html><head><title> Book Catalog </title></head>" + ...); ...

Jess Cceres Tello

Pg. 1 - 4

Curso de Java Cpsulas


Seleccionar los Atributos de un Cookie
La clase Cookie proporciona varios mtodos para seleccionar los valores del cookie y sus atributos. La utilizacin de estos mtodos es correcta, estn explicados en el javadoc para la clase Cookie. El siguiente ejemplo selecciona el campo comment del cookie creado en el cdigo anterior. Este campo describe el propsito del cookie.
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... //Si el usuario quiere aadir un libro, el sistema lo recuerda aadiendo una cookie if (values != null) { bookId = values[0]; Cookie getBook = new Cookie("Compra", bookId); getBook.setComment("El usuario quiere comprar este libro"); } ... }

Tambin se puede seleccionar la caducidad del cookie. Este atributo es til, por ejemplo, para borrar un cookie. El ejemplo podra utilizar este atributo para borrar un libro de la hoja de pedido.

public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String bookId = request.getParameter("Devolver"); ... if (bookId != null) { // Encuentra la cookie que contiene el libro a borrar ... // Borra la cookie poniendo su tiempo de existencia en milisegundos a 0 thisCookie.setMaxAge(0); ... } // Obtiene la cabecera del tipo de contenido antes de crear el objeto Writer response.setContentType("text/html"); PrintWriter out = response.getWriter(); //Imprime la salida out.println("<html> <head>" + "<title>El carrito de la compra</title>" + ...);

Jess Cceres Tello

Pg. 2 - 4

Curso de Java Cpsulas


Enviar Cookies
Las cookies se envan como cabeceras en la respuesta al cliente, se aaden con el mtodo addCookie de la clase HttpServletResponse. Si estamos utilizando un Writer para devolver texto, debemos llamar a addCookie antes de llamar al mtodo getWriter de HttpServletResponse.

public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... // Si el usuario quiere aadir un libro, el sistema lo recuerda aadiendo una cookie if (values != null) { bookId = values[0]; Cookie getBook = new Cookie("Comprar", bookId); getBook.setComment("El usuario tiene el deseo " + "de comprar este libro en la biblioteca virtual."); response.addCookie(getBook); } ... }

Recuperar Cookies
Los clientes devuelven las cookies como campos aadidos a las cabeceras de peticin HTTP. Para recuperar una cookie, debemos recuperar todas las cookies utilizando el mtodo getCookies de la clase HttpServletRequest. El mtodo getCookies devuelve un array de objetos Cookie, en el que podemos buscar la cookie o cookies que queramos. (Recuerda que distintas cookies pueden tener el mismo nombre, para obtener el nombre de una cookie, utiliza su mtodo getName.)
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String bookId = request.getParameter("Devolver"); ... if (bookId != null) { // Encuentra la cookie que pertenece al libro a borrar Cookie[] cookies = request.getCookies(); ... // Delete the book's cookie by setting its maximum age to zero thisCookie.setMaxAge(0); } ...

Jess Cceres Tello

Pg. 3 - 4

Curso de Java Cpsulas


Obtener el valor de una Cookie
Para obtener el valor de una cookie, se utiliza el mtodo getValue como se muestra en el siguiente ejemplo:
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String bookId = request.getParameter("Devolver"); ... if (bookId != null) { //Recupera todas las cookies Cookie[] cookies = request.getCookies(); for(i=0; i < cookies.length; i++) { Cookie thisCookie = cookie[i]; if (thisCookie.getName().equals("Comprar") && thisCookie.getValue().equals(bookId)) { // Borra la cookie poniendo el tiempo mximo a cero. thisCookie.setMaxAge(0);

} }

// Tambin inicializa la cabecera del tipo de contenido antes de acceder al objeto PrintWriter response.setContentType("text/html"); PrintWriter out = response.getWriter(); //Imprime el cdigo html generado out.println("<html> <head>" + "<title>Tu carrito de compra</title>" + ...);

Jess Cceres Tello

Pg. 4 - 4