English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manejo de cookies de JSP

Las cookies se almacenan en el archivo de texto del cliente y contienen una gran cantidad de información de rastreo. Basado en la tecnología Servlet, JSP puede proporcionar soporte para cookies HTTP.

Generalmente hay tres pasos para identificar a los clientes recurrentes:

  •             El script del servidor envía una serie de cookies al navegador. Por ejemplo, nombre, edad, número de ID, etc.

  •             El navegador almacena esta información en el equipo local para futuras necesidades.

  •             Cuando el navegador envíe cualquier solicitud al servidor la próxima vez, enviará esta información de cookie al servidor, y luego el servidor utilizará esta información para identificar al usuario o hacer otras cosas.

Esta sección le enseñará cómo configurar o reconfigurar las cookies, así como cómo acceder a ellas y cómo eliminarlas.

El manejo de Cookie en JSP requiere codificación y descodificación de chino, el método es el siguiente:

String str = java.net.URLEncoder.encode("chino", "UTF-8")-8);            //Codificación
String str = java.net.URLDecoder.decode("cadenas de caracteres codificadas","UTF-8")-8);   // Descodificación

Análisis de Cookie

Las cookies se establecen generalmente en la cabecera de información HTTP (aunque JavaScript puede establecer cookies directamente en el navegador). En JSP, para establecer una cookie, se debe enviar la siguiente cabecera de información al servidor:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2015 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=w3codebox; expires=Friday, 04-Feb-17 22:03:38 GMT; 
                 path=/; domain=oldtoolbag.com
Connection: close
Content-Type: text/html

Como puede ver, Set-La cabecera de información de Cookie contiene un par de clave y valor, una hora GMT (Greenwich Mean Time), una ruta y un dominio. El par de clave y valor se codifica como URL. La instrucción de validez de dominio indica cuándo el navegador puede eliminar esta cookie.

Si el navegador está configurado para almacenar cookies, guardará esta información hasta que caduque. Si cualquier página visitada por el usuario coincide con la ruta y el dominio del cookie, el navegador enviará de nuevo este cookie al servidor. La cabecera de información del navegador se verá así:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Las scripts de JSP acceden a estos cookies a través del método getCookies() del objeto request, que devuelve un array de objetos Cookie.

    Métodos de Cookie de Servlet

La siguiente tabla enumera los métodos comunes del objeto Cookie:

Número de ordenMétodo & Descripción
                1public void setDomain(String pattern) Establecer el nombre de dominio del cookie, por ejemplo, oldtoolbag.com
                2public String getDomain() Obtener el nombre de dominio del cookie, por ejemplo, oldtoolbag.com
                3public void setMaxAge(int expiry) Establecer la duración de validez del cookie, en segundos, el valor predeterminado es la duración de vida de la sesión actual
                4public int getMaxAge() Obtener la duración de validez del cookie, en segundos, el valor predeterminado es-1 indicando que el cookie vivirá hasta que el navegador se cierre
                5public String getName() Devuelve el nombre del cookie, el nombre se crea y no se puede modificar después
                6public void setValue(String newValue) Establecer el valor del cookie
                7public String getValue() Obtener el valor del cookie
                8public void setPath(String uri) Establecer la ruta del cookie, el valor predeterminado es todos los URL en el directorio actual de la página y todos los subdirectorios de este directorio
                9public String getPath() Obtener la ruta del cookie
                10public void setSecure(boolean flag) Indicar si el cookie debe ser transmitido encriptado
                11public void setComment(String purpose) Establecer la descripción del comentario del propósito del cookie. El comentario será muy útil cuando el navegador lo muestre al usuario.
                12public String getComment() Devuelve un comentario que describe el propósito del cookie, o null si no hay comentarios.

Configurar el cookie con JSP

Se utilizan tres pasos para configurar el cookie con JSP:

(1) Crear un objeto cookie: Llamar al constructor del cookie con un nombre y valor como parámetros, ambos son cadenas de texto.

Cookie cookie = new Cookie("key","value");

Asegúrese de que el nombre y el valor no contengan espacios o caracteres como los siguientes:

[ ] ( ) = , " / ? @ : ;

(2) Establecer la duración de validez:Llamar a la función setMaxAge() indica cuánto tiempo (en segundos) es válido el cookie. Las siguientes operaciones establecen la duración de validez en: 24 horas.

cookie.setMaxAge(60*60*24);

(3Enviar el cookie al encabezado de respuesta HTTP:Se llama a la función response.addCookie() para agregar un cookie al encabezado de respuesta HTTP.

response.addCookie(cookie);

Ejemplo de demostración

El código del archivo main.jsp se muestra a continuación:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="java.net." %>*" %>
<%
   // codificación, resolver problemas de mal entrelazamiento de caracteres chinos.   
   String str = URLEncoder.encode(request.getParameter("name"),"utf-8);  
   // Establecer las cookies name y url 
   Cookie name = new Cookie("name",
           str);
   Cookie url = new Cookie("url",
              request.getParameter("url"));
   // Establecer el tiempo de expiración de la cookie a24horas.
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 
   // Añadir cookie en la cabecera de la respuesta
   response.addCookie(name);
   response.addCookie(url);
%>
<html>
<head>
<title>Establecer Cookie</title>
</head>
<body>
<h1>Establecer Cookie</h1>
ul>
<li><p><b>Nombre del sitio:</b>
   <%= request.getParameter("name") %>
</p></li>
<li><p><b>URL:</b>
   <%= request.getParameter("url") %>
</p></li>
</ul>
</body>
</html>

A continuación, se muestra un formulario HTML simple que envía los datos del cliente al archivo main.jsp mediante el método GET y establece cookies:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Red de tutoriales básicos(oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method=GET>
Nombre del sitio: <input type="text" name="name">
<br />
URL: <input type="text" name="url" />
<input type="submit" value="Enviar" />
</form>
</body>
</html>

Guarde el código HTML anterior en el archivo test.htm.

Coloque este archivo en el directorio WebContent del proyecto jsp actual (en el mismo directorio que main.jsp).

A través de la visita a http://localhost:8080/testjsp/Suba los datos del formulario a main.jsp como se muestra a continuación: test.html

Intente ingresar "Nombre del sitio" y "URL", luego haga clic en el botón de enviar, se mostrará "Nombre del sitio" y "URL" en su pantalla y se establecerán dos cookies de "Nombre del sitio" y "URL".

Leer Cookie usando JSP

Para leer el cookie, debe llamar al método request.getCookies() para obtener un array de objetos javax.servlet.http.Cookie, luego recorrer este array, usar getName() y getValue() métodos para obtener el nombre y valor de cada cookie.

Ejemplo de demostración

Vamos a leer el cookie del ejemplo anterior, a continuación se muestra el código del archivo cookie.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="java.net." %>*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Obtener Cookie</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // Obtener datos de cookies, es un array
   cookies = request.getCookies();
   if( cookies != null ) {
      out.println("<h2> buscar nombre y valor de Cookie </h2)");
      for (int i = 0; i < cookies.length; i++}
         cookie = cookies[i];
        
         out.print("Nombre de parámetro: "); + cookie.getName());
         out.print("<br>);
         out.print("Valor de parámetro: "); + URLDecoder.decode(cookie.getValue(), "utf-8) +"<br>
         out.print("------------------------------------<br>
      }
  }
      out.println("<h2>No se encontró Cookie</h2)");
  }
%>
</body>
</html>

Después de que el navegador acceda, el resultado de la salida será:

    Eliminar cookie usando JSP

Eliminar cookie es muy simple. Si desea eliminar un cookie, siga los pasos a continuación:

  •             Obtener un cookie existente y almacenarlo en el objeto Cookie.

  •             Establecer la duración de vida del cookie en 0.

  •             Vuelva a agregar este cookie a la cabecera de la respuesta.

Ejemplo de demostración

El siguiente programa elimina un cookie llamado "name", cuando ejecute cookie.jsp por segunda vez, name será null.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="java.net." %>*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Obtener Cookie</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // Obtener cookies del dominio actual, es un array
   cookies = request.getCookies();
   if( cookies != null ) {
      out.println("<h2> buscar nombre y valor de Cookie </h2)");
      for (int i = 0; i < cookies.length; i++}
         cookie = cookies[i];
         if((cookie.getName( )).compareTo("name") == 0 ){
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            out.print("Eliminar Cookie: "); + 
            cookie.getName( ) + "<br/)");
         }
         out.print("Nombre de parámetro: "); + cookie.getName());
         out.print("<br>);
         out.print("Valor de parámetro: "); + URLDecoder.decode(cookie.getValue(), "utf-8) +"<br>
         out.print("------------------------------------<br>
      }
  }
      out.println("<h2>No se encontró Cookie</h2)");
  }
%>
</body>
</html>

Accediendo a través del navegador, el resultado de salida es:

Acceda nuevamente a http://localhost:8080/testjsp/cookie.jsp, se obtendrá el siguiente resultado:

Puede ver que la cookie llamada "name" ya no existe.

También puede eliminar manualmente las cookies en el navegador. En el navegador IE, haga clic en la opción Herramientas, luego seleccione Opciones de Internet, haga clic en Eliminar cookies para eliminar todas las cookies.