Muchos sitios web usan pequeñas strings de texto conocidas como cookies para almacenar el estado persistente del lado del cliente entre las conexiones. Las cookies se pasan del servidor al cliente y viceversa en los encabezados HTTP de requests y respuestas. Las cookies pueden ser utilizadas por un servidor para indicar ID de sesión, contenido del carrito de compras, credenciales de inicio de sesión, preferencias de usuario y más.
¿Cómo funcionan las cookies?
Como se ve en el diagrama anterior, cuando un usuario solicita por primera vez una página, el servidor, junto con el recurso, envía un objeto de cookie para que se almacene en la máquina del cliente. Este objeto puede contener detalles de la solicitud. Ahora, más adelante, si el usuario vuelve a solicitar el mismo recurso, envía junto con la solicitud la cookie almacenada que puede ser utilizada por los servidores para mejorar aún más la experiencia del usuario.
Atributos de la cookie:
- Par nombre = valor: Esto representa la información real almacenada dentro de la cookie. Ni el nombre ni el valor deben contener espacios en blanco ni ninguno de los siguientes caracteres: [ ] ( ) = , ” /? @ : ;
Ejemplo de par de nombre-valor de cookie válido:
Set-Cookie:session-id = 187-4969589-3049309
- Dominio: por defecto, una cookie se aplica al servidor del que proviene. Si www.foo.example.com establece originalmente una cookie, el navegador solo enviará la cookie de vuelta a www.foo.example.com. Sin embargo, un sitio también puede indicar que una cookie se aplica dentro de un subdominio completo, no solo en el servidor original. Por ejemplo, esta solicitud establece una cookie de usuario para todo el dominio foo.example.com:
el navegador devolverá esta cookie no solo a www.foo.example.com, sino también a lothar.foo.example.com, eliza. foo.example.com, enoch.foo.example.com y cualquier otro host en algún lugar del dominio foo.example.com. Sin embargo, un servidor solo puede configurar cookies para dominios a los que pertenece inmediatamente. www.foo.example.com no puede configurar una cookie para www.geeksforgeeks.org, example.com o .com, sin importar cómo configure el dominio.Set-Cookie: user = geek ;Domain =.foo.example.com
- Ruta: al solicitar un documento en el subárbol desde el mismo servidor, el cliente repite esa cookie. Sin embargo, no utiliza la cookie en otros directorios del sitio.
Set-Cookie: user = geek; Path =/ restricted
- Caduca: el navegador debe eliminar la cookie de su caché después de que haya pasado esa fecha.
Set-Cookie: user = geek; expires = Wed, 21-Feb-2017 15:23:00 IST
- Max-Age: este atributo establece que la cookie caduque después de que haya pasado una cierta cantidad de segundos en lugar de en un momento específico. Por ejemplo, esta cookie caduca una hora (3600 segundos) después de configurarse por primera vez.
Set-Cookie: user = "geek"; Max-Age = 3600
Constructor : crea una cookie con el par nombre-valor especificado.
Syntax : public Cookie(String name, String value) Parameters : name : name of the cookie value : value associated with this cookie
Métodos :
- setDomain() : Establece el dominio en el que esta cookie es visible. Los dominios se explican en detalle en la parte de atributos de la cookie anteriormente.
Syntax : public void setDomain(String pattern) Parameters : pattern : string representing the domain in which this cookie is visible.
- getDomain() : Devuelve el dominio en el que está visible esta cookie.
Syntax : public String getDomain()
- setComment() : Especifica el propósito de esta cookie.
Syntax : public void setComment(String purpose) Parameters : purpose : string representing the purpose of this cookie.
- getComment() : Devuelve la string que representa el propósito de esta cookie.
Syntax : public String getComment()
- setMaxAge() : especifica el tiempo (en segundos) transcurrido antes de que caduque esta cookie.
Syntax : public void setMaxAge(long time) Parameters : time : time in seconds before this cookie expires
- getMaxAge() : Devuelve el componente de edad máxima de esta cookie.
Syntax : public String getMaxAge()
- setPath() : especifica una ruta para la cookie a la que el cliente debe devolver la cookie.
Syntax : public void setPath(String path) Parameters : path : path where this cookie is returned
- getPath() : Devuelve el componente de ruta de esta cookie.
Syntax : public String getMaxAge()
- setSecure() : Indica si se utilizará un protocolo seguro al enviar esta cookie. El valor predeterminado es falso.
Syntax : public void setSecure(boolean secure) Parameters: secure - If true, the cookie can only be sent over a secure protocol like https. If false, it can be sent over any protocol.
- getSecure() : Devuelve verdadero si esta cookie debe
enviarse mediante un protocolo seguro; de lo contrario, devuelve falso.Syntax : public boolean getSecure()
- getName() : Devuelve el nombre de la cookie.
Syntax : public String getName()
- setValue() : asigna un nuevo valor a la cookie después de la inicialización.
Syntax : public void setValue(String newValue) Parameters : newValue - a String specifying the new value
- getValue: Devuelve el valor de la cookie.
Syntax : public String getValue()
- getVersion() : Devuelve 0 si la cookie cumple con la especificación original de Netscape; 1 si la cookie cumple con RFC 2965/2109
Syntax : public int getVersion()
- setVersion() : Se utiliza para establecer la versión del protocolo de cookies que utiliza esta cookie.
Syntax :public void setVersion(int v) Parameters : v - 0 for original Netscape specification; 1 for RFC 2965/2109
- clone() : devuelve una copia de esta cookie.
Syntax : public Cookie clone()
A continuación se muestra una implementación de Java de un programa de servlet simple que almacena una cookie en el navegador cuando el usuario lo solicita por primera vez y luego, para requests posteriores, muestra las cookies almacenadas.
// Java program to illustrate methods // of Cookie class import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class cookieTest */ @WebServlet("/cookieTest") public class cookieTest extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public cookieTest() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); // Create a new cookie with the name test cookie // and value 123 Cookie cookie = new Cookie("test_cookie", "123"); // setComment() method cookie.setComment("Just for testing"); // setDomain() method // cookie.setDomain("domain"); // setMaxAge() method cookie.setMaxAge(3600); // setPath() method cookie.setPath("/articles"); // setSecure() method cookie.setSecure(false); // setValue() method cookie.setValue("321"); // setVersion() method cookie.setVersion(0); response.addCookie(cookie); PrintWriter pw = response.getWriter(); pw.print("<html><head></head><body>"); Cookie ck[] = request.getCookies(); if (ck == null) { pw.print("<p>This is first time the page is requested.</p>"); pw.print("<p>And therefore no cookies found</p></body></html>"); } else { pw.print("<p>Welcome Again...Cookies found</p>"); for (int i = 0; i < ck.length; i++) { // getName() method pw.print("<p>Name :" + ck[i].getName() + "</p>"); // getValue() method pw.print("<p>Value :" + ck[i].getValue() + "</p>"); // getDomain() method pw.print("<p>Domain :" + ck[i].getDomain() + "</p>"); // getPath() method pw.print("<p>Name :" + ck[i].getPath() + "</p>"); // getMaxAge() method pw.print("<p>Max Age :" + ck[i].getMaxAge() + "</p>"); // getComment() method pw.print("<p>Comment :" + ck[i].getComment() + "</p>"); // getSecure() method pw.print("<p>Name :" + ck[i].getSecure() + "</p>"); // getVersion() method pw.print("<p>Version :" + ck[i].getVersion() + "</p>"); } pw.print("<body></html>"); } pw.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
SALIDA: La siguiente salida es de un navegador web-
Para la primera solicitud:
This is first time the page is requested. And therefore no cookies found.
Para la segunda solicitud:
Welcome Again...Cookies found Name :test_cookie Value :321 Domain :null Name :null Max Age :-1 Comment :null Name :false Version :0
¿Cómo ejecutar el programa anterior?
Primero, asegúrese de tener algún servidor como Apache Tomcat instalado y configurado con la herramienta que está usando como Eclipse. Simplemente ejecute el programa anterior en el servidor o en su navegador local ingresando la dirección completa del directorio del servidor que está utilizando.
El servlet CookieTest, un servlet que realiza tres tareas:
- Primero, el servlet establece una cookie con el nombre test_cookie. Otras líneas en el programa establecen los atributos de la cookie, como edad máxima, dominio, valor, etc.
- En segundo lugar, el servlet usa request.getCookies para encontrar todas las cookies entrantes y mostrar sus nombres y otros atributos correspondientes.
- Si no se encuentran cookies como es el caso de la primera solicitud, se muestra un mensaje de visualización simple que indica que es la primera visita a la página.
Referencia: documentación oficial de Java
Este artículo es una contribución de Shaksham Garg y Rishabh Mahrsee . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA