Java.net.HttpCookie en Java

Requisito previo – Cookies

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.

Un objeto HttpCookie representa una cookie http, que transporta información de estado entre el servidor y el agente de usuario. La cookie se adopta ampliamente para crear sesiones con estado.
Hay 3 especificaciones de cookies http:

La clase HttpCookie puede aceptar estas 3 formas de sintaxis.

Constructor: crea una cookie con el nombre y el valor especificados. El nombre debe contener solo caracteres alfanuméricos ASCII y cumplir con RFC 2965. Genera una excepción IllegalArgument si el nombre no es correcto o NullPointerException si el nombre es nulo. El valor puede ser cualquier cookie que desee almacenar.

Syntax : public HttpCookie(String name,
          String value)
Parameters :
name : name of cookie
value : value of cookie
Throws :
IllegalArgumentException : if name does not conform to RFC2965
NullPointerException : if name is null

Métodos :

  1. parse() : devuelve una lista de cookies analizadas desde la string de encabezado. El encabezado debe comenzar con el token set-cookie o set-cookie2 o no debe contener ningún token.
    Syntax : public static List parse(String header)
    Parameters : 
    header : String to be parsed as cookies
  2. hasExpired() : devuelve un valor booleano que indica si la cookie ha caducado o no.
    Syntax : public boolean hasExpired()
  3. setComment() : se usa para establecer una breve descripción que describe el propósito de la cookie. Se utiliza cuando se presenta la cookie al usuario.
    Syntax : public void setComment(String purpose)
    Parameters :
    purpose : purpose of cookie
  4. getComment() : Devuelve la descripción de la cookie, o nulo si la cookie no tiene comentarios.
    Syntax : public void getComment()
  5. setCommentURL() : se usa para establecer una breve URL de comentario que describe el propósito de la cookie. Se utiliza cuando el navegador presenta la cookie al usuario.
    Syntax : public void setCommentURL(String purpose)
    Parameters :
    purpose : purpose of cookie
  6. getCommentURL() : Devuelve el comentario de URL de la cookie, o nulo si la cookie no tiene comentarios de URL.
    Syntax : public String getComment()
  7. setDiscard() : se usa para establecer si el agente de usuario debe descartar esta cookie o no.
    Syntax : public void setDiscard(Boolean discard)
    Parameters :
    discard : true if UA should discard, otherwise false
  8. getDiscard() : Devuelve el estado de la variable de descarte establecida por el método setDiscard(). Más específicamente, devuelve verdadero si UA descarta esta cookie; de ​​lo contrario, devuelve falso.
    Syntax : public Boolean getDiscard()
  9. setPortList() : se usa para especificar los puertos que puede usar esta cookie.
    Syntax : public void setPortList(String portList)
    Parameters :
    portList : String of comma separated digits specifying the ports.
  10. getPortList() : Devuelve la lista de puertos que puede usar esta cookie.
    Syntax : public String getPortList()
  11. setDomain() : Especifique el dominio en el que esta cookie debe ser visible. Por ejemplo, las cookies enviadas desde un servlet en bali.vacations.com normalmente no serán devueltas por el navegador a las páginas en queensland.vacations.com. Si el sitio quisiera que esto sucediera, los servlets podrían especificar cookie.setDomain(“.vacations.com”). Para evitar que los servidores configuren cookies que se aplican a hosts fuera de su dominio, el dominio especificado debe cumplir con los siguientes requisitos: debe comenzar con un punto (p. ej., .coreservlets.com).
    Syntax : public void setDomain(String domain)
    Parameters :
    domain : String representing the domain in which this cookie is visible
  12. getDomain() : Devuelve el dominio en el que está visible esta cookie.
    Syntax : public String getDomain()
  13. setMaxAge() : se utiliza para establecer la edad máxima de la cookie en segundos. Especifica el tiempo máximo después de la creación de la cookie durante el cual está viva. Los valores negativos especifican que la cookie caducará tan pronto como se cierre el navegador.
    Syntax : public void setMaxAge(long age)
    Parameters :
    age : Max survive time in seconds
  14. getMaxAge() : Devuelve la antigüedad máxima de la cookie.
    Syntax : public long getMaxAge()
  15. setPath() : se usa para especificar la ruta al cliente en la que debe devolver la cookie. Esta cookie es visible para todas las páginas y subdirectorios de la ruta especificada. Por ejemplo, si el servidor envió la cookie desde http://ecommerce.site.com/toys/specials.html, el navegador devolvería la cookie al conectarse a http://ecommerce.site.com/to/beginners. html, pero no a http://ecommerce.site.com/c/classic.html.
    Syntax : public void setPath(String uri)
    Parameters :
    uri - a String specifying a path
  16. getPath() : Devuelve la ruta establecida para esta cookie.
    Syntax : public String getPath()
  17. Implementación Java:

    // Java Program to illustrate various
    // methods of java.net.HttpCookie class
    public class httpcookie1 
    {
      
        public static void main(String[] args) 
        {
      
            // Constructor to create a new cookie.
            HttpCookie cookie = new HttpCookie("First", "1");
      
            // setComment() method
            cookie.setComment("Just for explanation");
      
            // getComment() method
            System.out.println("Comment : " + cookie.getComment());
      
            // setCommentURL() method
            cookie.setCommentURL("192.168.1.1");
      
            // getCommentURL() method
            System.out.println("CommentURL : " + cookie.getCommentURL());
      
            // setDiscard() method
            cookie.setDiscard(true);
      
            // getDiscard() method
            System.out.println("Discard : " + cookie.getDiscard());
      
            // setPortlist() method
            cookie.setPortlist("1001,8520");
      
            // getPortList() method
            System.out.println("Ports: " + cookie.getPortlist());
      
            // setDomain() method
            cookie.setDomain(".localhost.com");
      
            // getDomain() method
            System.out.println("Domain : " + cookie.getDomain());
      
            // setMaxAge() method
            cookie.setMaxAge(3600);
      
            // getMaxAge() method
            System.out.println("Max Age : " + cookie.getMaxAge());
      
            // setPath() method
            cookie.setPath("192.168.1.1/admin/index.html");
      
            // getPath() method
            System.out.println("Path: " + cookie.getPath());
      
        }
      
    }

    Producción

    Comment : Just for explanation
    CommentURL : 192.168.1.1
    Discard : true
    Ports: 1001,8520
    Domain : .localhost.com
    Max Age : 3600
    Path: 192.168.1.1/admin/index.html
  18. 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.
  19. getSecure() : Devuelve verdadero si esta cookie debe enviarse mediante un protocolo seguro; de lo contrario, devuelve falso.
    Syntax : public boolean getSecure()
  20. getName() : Devuelve el nombre de la cookie.
     Syntax : public String getName()
  21. 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
  22. getValue: Devuelve el valor de la cookie.
    Syntax : public String getValue()
  23. 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()
  24. setVersion() : Se utiliza para establecer la versión del protocolo de cookies que utiliza esta cookie.
    Syntax :public void setVersion(int v)
                   throws IllegalArgumentException
    Parameters :
    v - 0 for original Netscape specification; 1 for RFC 2965/2109
    Throws :
    IllegalArgumentException - if v is neither 0 nor 1
  25. isHttpOnly() : Devuelve verdadero si la cookie solo puede ser utilizada por http, es decir, no puede ser utilizada por lenguajes de secuencias de comandos como JS, vb, etc.
    Syntax : public boolean isHttpOnly()
  26. setHttpOnly() : se usa para establecer si esta cookie es solo http o no.
    Syntax : public void setHttpOnly(boolean httpOnly)
    Parameters :
    httpOnly - if true make the cookie HTTP only, i.e. only visible as part 
    of an HTTP request.
  27. domainMatches() : función de utilidad para verificar si el nombre de host está en el dominio o no.
    Syntax : public static boolean domainMatches(String domain,
                        String host)
    Parameters :
    domain : domain to check hostname with
    host : host to check
  28. toString() : construye una representación de string de esta cookie.
     Syntax :public String toString()
  29. equals() : devuelve verdadero si dos cookies http son iguales entre sí, de lo contrario, devuelve falso.
     Syntax :public boolean equals(Object obj)
  30. hashCode() : Devuelve el código hash de esta cookie http. El resultado es la suma del valor del código hash de tres componentes importantes de esta cookie: nombre, dominio y ruta. Anula hashCode en la clase Object.
    Syntax : public int hashCode()
  31. clone() : crea y devuelve una copia de este objeto. Anula el método de clonación de la clase de objeto.
    Syntax : public Object clone()

Implementación Java:

// Java Program to illustrate various
// methods of java.net.HttpCookie class
import java.net.HttpCookie;
  
public class httpcookie1 
{
  
    public static void main(String[] args) 
    {
  
        // Constructor to create a new cookie.
        HttpCookie cookie = new HttpCookie("First", "1");
  
        // setSecure() method
        cookie.setSecure(true);
  
        // getSecure() method
        System.out.println("Secure : " + cookie.getSecure());
  
        // getName() method
        System.out.println("Name : " + cookie.getName());
  
        // setValue() method : can be used to modify value of cookie.
        cookie.setValue("2");
  
        // getvalue() method
        System.out.println("Value : " + cookie.getValue());
  
        // setVersion() method
        cookie.setVersion(1);
  
        // getVersion() method
        System.out.println("Version : " + cookie.getVersion());
  
        // setHttPonly() method
        cookie.setHttpOnly(true);
  
        // isHttpOnly() method
        System.out.println("is HTTP only : " + cookie.isHttpOnly());
  
        // toString() method
        System.out.println("toString : " + cookie.toString());
  
        // hashcode() method
        System.out.println("Hashcode : " + cookie.hashCode());
  
    }
  
}

Producción :

Secure : true
Name : First
Value : 2
Version : 1
is HTTP only : true
toString : First="2"
Hashcode : 97440432

Otro ejemplo para mostrar cómo los servidores web utilizan realmente las cookies en el que imprimimos los detalles de las cookies almacenadas por www.facebook.com

import java.io.IOException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
  
public class httpcookie1 
{
  
    public static void main(String[] args) throws IOException 
    {
  
        String urlString = "https://www.facebook.com";
  
        // Create a default system-wide CookieManager
        CookieManager cookieManager = new CookieManager();
  
        CookieHandler.setDefault(cookieManager);
  
        // Open a connection for the given URL
        URL url = new URL(urlString);
        URLConnection urlConnection = url.openConnection();
        urlConnection.getContent();
  
        // Get CookieStore which is the default internal in-memory
        CookieStore cookieStore = cookieManager.getCookieStore();
  
        // Retrieve all stored HttpCookies from CookieStore
        List<HttpCookie> cookies = cookieStore.getCookies();
  
        int cookieIdx = 0;
  
        // Iterate HttpCookie object
        for (HttpCookie ck : cookies) {
  
            System.out.println("------ Cookie." + ++cookieIdx + " -------");
  
            // Get the cookie name
            System.out.println("Cookie name: " + ck.getName());
  
            // Get the domain set for the cookie
            System.out.println("Domain: " + ck.getDomain());
  
            // Get the max age of the cookie
            System.out.println("Max age: " + ck.getMaxAge());
  
            // Get the path of the server
            System.out.println("Server path: " + ck.getPath());
  
            // Get boolean if the cookie is being restricted to a secure
            // protocol
            System.out.println("Is secured: " + ck.getSecure());
  
            // Gets the value of the cookie
            System.out.println("Cookie value: " + ck.getValue());
  
            // Gets the version of the protocol with which the given cookie is
            // related.
            System.out.println("Cookie protocol version: " + ck.getVersion());
  
        }
    }
  
}

Producción :

------------------ Cookie.1 ------------------
Cookie name: fr
Domain: .facebook.com
Max age: 7775999
Server path: /
Is secured: true
Cookie value: 0Xj7tBSsWlmtXPo92..BZFC8G.qC.AAA.0.0.BZFC8G.AWUwiIgM
Cookie protocol version: 0

Referencia:
documentación oficial de Java

Este artículo es una contribución de 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.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *