JSP - Manejo de cookies
En este capítulo, analizaremos el manejo de cookies en JSP. Las cookies son archivos de texto almacenados en la computadora del cliente y se guardan para varios propósitos de rastreo de información. JSP admite de forma transparente las cookies HTTP mediante la tecnología de servlet subyacente.
Hay tres pasos involucrados en la identificación y retorno de los usuarios:
La secuencia de comandos del servidor envía un conjunto de cookies al navegador. Por ejemplo, nombre, edad o número de identificación, etc.
El navegador almacena esta información en la máquina local para uso futuro.
Cuando la próxima vez que el navegador envía una solicitud al servidor web, envía la información de las cookies al servidor y el servidor utiliza esa información para identificar al usuario o puede ser también para algún otro propósito.
Este capítulo le enseñará cómo configurar o restablecer cookies, cómo acceder a ellas y cómo eliminarlas usando programas JSP.
La anatomía de una galleta
Las cookies generalmente se establecen en un encabezado HTTP (aunque JavaScript también puede configurar una cookie directamente en un navegador). Una JSP que establece una cookie puede enviar encabezados que se parecen a esto:
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html
Como puede ver, el Set-Cookie header contiene a name value pair, a GMT date, a path y a domain. El nombre y el valor estarán codificados en URL. losexpires campo es una instrucción para el navegador para "forget" la cookie después de la fecha y hora indicadas.
Si el navegador está configurado para almacenar cookies, conservará esta información hasta la fecha de caducidad. Si el usuario apunta el navegador a cualquier página que coincida con la ruta y el dominio de la cookie, reenviará la cookie al servidor. Los encabezados del navegador pueden verse 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
Un script JSP tendrá acceso a las cookies a través del método de solicitud. request.getCookies()que devuelve una matriz de objetos Cookie .
Métodos de cookies de servlet
La siguiente tabla enumera los métodos útiles asociados con el objeto Cookie que puede utilizar mientras manipula cookies en JSP:
S.No. | Método y descripción |
---|---|
1 | public void setDomain(String pattern) Este método establece el dominio al que se aplica la cookie; por ejemplo, tutorialspoint.com. |
2 | public String getDomain() Este método obtiene el dominio al que se aplica la cookie; por ejemplo, tutorialspoint.com. |
3 | public void setMaxAge(int expiry) Este método establece cuánto tiempo (en segundos) debe transcurrir antes de que caduque la cookie. Si no configura esto, la cookie durará solo durante la sesión actual. |
4 | public int getMaxAge() Este método devuelve la edad máxima de la cookie, especificada en segundos, por defecto, -1 lo que indica que la cookie persistirá hasta que se apague el navegador. |
5 | public String getName() Este método devuelve el nombre de la cookie. El nombre no se puede cambiar después de la creación. |
6 | public void setValue(String newValue) Este método establece el valor asociado con la cookie. |
7 | public String getValue() Este método obtiene el valor asociado con la cookie. |
8 | public void setPath(String uri) Este método establece la ruta a la que se aplica esta cookie. Si no especifica una ruta, la cookie se devuelve para todas las URL en el mismo directorio que la página actual, así como para todos los subdirectorios. |
9 | public String getPath() Este método obtiene la ruta a la que se aplica esta cookie. |
10 | public void setSecure(boolean flag) Este método establece el valor booleano que indica si la cookie solo debe enviarse a través de conexiones cifradas (es decir, SSL). |
11 | public void setComment(String purpose) Este método especifica un comentario que describe el propósito de una cookie. El comentario es útil si el navegador presenta la cookie al usuario. |
12 | public String getComment() Este método devuelve el comentario que describe el propósito de esta cookie, o nulo si la cookie no tiene comentarios. |
Configuración de cookies con JSP
La configuración de cookies con JSP implica tres pasos:
Paso 1: crear un objeto Cookie
Llamas al constructor de cookies con un nombre de cookie y un valor de cookie, los cuales son cadenas.
Cookie cookie = new Cookie("key","value");
Tenga en cuenta que ni el nombre ni el valor deben contener espacios en blanco ni ninguno de los siguientes caracteres:
[ ] ( ) = , " / ? @ : ;
Paso 2: Establecer la edad máxima
Tu usas setMaxAgepara especificar cuánto tiempo (en segundos) debe ser válida la cookie. El siguiente código configurará una cookie durante 24 horas.
cookie.setMaxAge(60*60*24);
Paso 3: enviar la cookie a los encabezados de respuesta HTTP
Tu usas response.addCookie para agregar cookies en el encabezado de respuesta HTTP de la siguiente manera
response.addCookie(cookie);
Ejemplo
Modifiquemos nuestro Ejemplo de formulario para configurar las cookies para el nombre y apellido.
<%
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
%>
<html>
<head>
<title>Setting Cookies</title>
</head>
<body>
<center>
<h1>Setting Cookies</h1>
</center>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
Pongamos el código anterior en main.jsp archivo y utilícelo en la siguiente página HTML:
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Mantenga el contenido HTML anterior en un archivo hello.jsp y pon hello.jsp y main.jsp en <Tomcat-installation-directory>/webapps/ROOTdirectorio. Cuando accederáshttp://localhost:8080/hello.jsp, aquí está la salida real del formulario anterior.
Intente ingresar el Nombre y el Apellido y luego haga clic en el botón Enviar. Esto mostrará el nombre y el apellido en su pantalla y también establecerá dos cookiesfirstName y lastName. Estas cookies se devolverán al servidor la próxima vez que haga clic en el botón Enviar.
En la siguiente sección, explicaremos cómo puede acceder a estas cookies en su aplicación web.
Leer cookies con JSP
Para leer las cookies, debe crear una matriz de objetos javax.servlet.http.Cookie llamando algetCookies( )método de HttpServletRequest . Luego recorre la matriz y usagetName() y getValue() métodos para acceder a cada cookie y valor asociado.
Ejemplo
Leamos ahora las cookies que se establecieron en el ejemplo anterior:
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
%>
</body>
</html>
Pongamos ahora el código anterior en main.jsparchivo e intente acceder a él. Si configura elfirst_name cookie como "John" y el last_name cookie como "Jugador" y luego ejecuta http://localhost:8080/main.jsp mostrará el siguiente resultado:
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
Eliminar cookies con JSP
Eliminar las cookies es muy sencillo. Si desea eliminar una cookie, simplemente debe seguir estos tres pasos:
Leer una cookie ya existente y almacenarla en el objeto Cookie.
Establezca la edad de la cookie como cero usando el setMaxAge() método para eliminar una cookie existente.
Vuelva a agregar esta cookie en el encabezado de respuesta.
Ejemplo
El siguiente ejemplo le mostrará cómo eliminar una cookie existente llamada "first_name" y cuando ejecute main.jsp JSP la próxima vez, devolverá un valor nulo para first_name.
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie: " +
cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println(
"<h2>No cookies founds</h2>");
}
%>
</body>
</html>
Pongamos ahora el código anterior en el main.jsparchivo e intente acceder a él. Mostrará el siguiente resultado:
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
Ahora ejecute http: // localhost: 8080 / main.jsp una vez más y debería mostrar solo una cookie de la siguiente manera:
Found Cookies Name and Value
Name : last_name, Value: Player
Puede eliminar sus cookies en Internet Explorer manualmente. Comience en el menú Herramientas y seleccione Opciones de Internet. Para eliminar todas las cookies, haga clic en el botón Eliminar cookies.