Java.net.HttpCookie u Javi

Preduvjet - Kolačići

Mnoga web-mjesta koriste male nizove teksta poznate kao kolačići za pohranjivanje trajnog stanja na strani klijenta između veza. Kolačići se prosljeđuju od poslužitelja do klijenta i natrag u HTTP zaglavljima zahtjeva i odgovora. Poslužitelj može koristiti kolačiće za označavanje ID-ova sesije, sadržaja košarice za kupnju, vjerodajnica za prijavu, korisničkih postavki i više. Objekt HttpCookie predstavlja http kolačić koji prenosi podatke o stanju između poslužitelja i korisničkog agenta. Kolačić je široko prihvaćen za stvaranje sesija s praćenjem stanja. Postoje 3 http specifikacije kolačića:

Klasa HttpCookie može prihvatiti sva ova 3 oblika sintakse.

Konstruktor:

Stvara kolačić s navedenim imenom i vrijednošću. Ime mora sadržavati samo ASCII alfanumeričke znakove i biti u skladu s RFC 2965. Izbacuje iznimku IllegalArgument ako ime nije ispravno ili NullPointerException ako je ime null. Vrijednost može biti bilo što što kolačić želi pohraniti.

    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

metode:

  1. raščlaniti() : vraća popis kolačića raščlanjenih iz niza zaglavlja. zaglavlje mora započeti tokenom set-cookie ili set-cookie2 ili uopće ne smije sadržavati token.
        Syntax :     public static List parse(String header)   
    Parameters :
    header : String to be parsed as cookies
  2. hasExpired() : vraća booleovu vrijednost koja pokazuje je li kolačić istekao ili ne.
        Syntax :     public boolean hasExpired()  
  3. postaviKomentar() : Koristi se za postavljanje kratkog opisa koji opisuje svrhu kolačića. Koristi se kada se kolačić prikazuje korisniku.
        Syntax :     public void setComment(String purpose)   
    Parameters :
    purpose : purpose of cookie
  4. getComment() : Vraća opis kolačića ili null ako kolačić nema komentara.
        Syntax :     public void getComment()  
  5. postaviKomentarURL() : Koristi se za postavljanje kratkog URL-a komentara koji opisuje svrhu kolačića. Koristi se kada preglednik korisniku predstavlja kolačić.
        Syntax :     public void setCommentURL(String purpose)   
    Parameters :
    purpose : purpose of cookie
  6. getCommentURL() : Vraća URL komentar kolačića ili null ako kolačić nema URL komentara.
        Syntax :     public String getComment()  
  7. setDiscard() : Koristi se za postavljanje treba li korisnički agent odbaciti ovaj kolačić ili ne.
        Syntax :     public void setDiscard(Boolean discard)   
    Parameters :
    discard : true if UA should discard otherwise false
  8. getDiscard() : Vraća varijablu stanja odbacivanja postavljenu metodom setDiscard(). Točnije, vraća istinito ako UA želi odbaciti ovaj kolačić, inače je lažno.
        Syntax :     public Boolean getDiscard()  
  9. setPortList() : Koristi se za određivanje priključaka koje ovaj kolačić može koristiti.
        Syntax :     public void setPortList(String portList)   
    Parameters :
    portList : String of comma separated digits specifying the ports.
  10. getPortList() : Vraća popis portova koje ovaj kolačić može koristiti.
        Syntax :     public String getPortList()  
  11. setDomain() : Navedite domenu u kojoj bi ovaj kolačić trebao biti vidljiv. Na primjer, kolačiće poslane sa servleta na bali.vacations.com preglednik obično ne bi vratio na stranice na queensland.vacations.com. Ako je web mjesto željelo da se to dogodi, servleti bi mogli navesti cookie.setDomain(.vacations.com). Kako bi spriječili poslužitelje da postave kolačiće koji se primjenjuju na hostove izvan njihove domene, navedena domena mora ispunjavati sljedeće zahtjeve: mora započeti s točkom (npr. .coreservlets.com).
        Syntax :     public void setDomain(String domain)   
    Parameters :
    domain : String representing the domain in which this cookie is visible
  12. getDomain() : Vraća domenu u kojoj je ovaj kolačić vidljiv.
        Syntax :     public String getDomain()  
  13. setMaxAge() : koristi se za postavljanje maksimalne starosti kolačića u sekundama. Određuje maksimalno vrijeme nakon stvaranja kolačića tijekom kojeg je on živ. Negativne vrijednosti označavaju da će kolačić isteći čim se preglednik zatvori.
        Syntax :     public void setMaxAge(long age)   
    Parameters :
    age : Max survive time in seconds
  14. getMaxAge() : Vraća maksimalnu starost kolačića.
        Syntax :     public long getMaxAge()  
  15. setPath() : Koristi se za određivanje puta do klijenta na kojem bi trebao vratiti kolačić. Ovaj kolačić vidljiv je svim stranicama i poddirektorijima navedene staze. Na primjer, ako je poslužitelj poslao kolačić s http://ecommerce.site.com/toys/specials.html, preglednik bi poslao kolačić natrag pri povezivanju na http://ecommerce.site.com/to/beginners.html, ali ne i na http://ecommerce.site.com/c/classic.html.
        Syntax :     public void setPath(String uri)   
    Parameters :
    uri - a String specifying a path
  16. getPath() : Vraća stazu postavljenu za ovaj kolačić.
        Syntax :     public String getPath()  
  17. Implementacija Jave:
  18. 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  (  '10018520'  );      // 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  ());      }   }   
  19. Izlaz
  20.  Comment : Just for explanation   
    CommentURL : 192.168.1.1
    Discard : true
    Ports: 10018520
    Domain : .localhost.com
    Max Age : 3600
    Path: 192.168.1.1/admin/index.html
  21. setSecure() : Navedeno hoće li se koristiti sigurni protokol prilikom slanja ovog kolačića. Zadana vrijednost je false.
        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.
  22. getSecure() : Vraća true ako ovaj kolačić mora biti poslan sigurnim protokolom, inače je false.
        Syntax :     public boolean getSecure()  
  23. getName() : Vraća naziv kolačića.
           Syntax :     public String getName()  
  24. setValue() : Dodjeljuje novu vrijednost kolačiću nakon inicijalizacije.
        Syntax :     public void setValue(String newValue)   
    Parameters :
    newValue - a String specifying the new value
  25. getValue: Vraća vrijednost kolačića.
        Syntax :     public String getValue()  
  26. getVersion() : Vraća 0 ako je kolačić u skladu s originalnom Netscape specifikacijom; 1 ako je kolačić u skladu s RFC 2965/2109
        Syntax :     public int getVersion()  
  27. setVersion() : Koristi se za postavljanje verzije protokola kolačića koji ovaj kolačić koristi.
        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
  28. isHttpOnly() : Vraća true ako kolačić može koristiti samo http, tj. ne mogu ga koristiti skriptni jezici poput JS vb itd.
        Syntax :     public boolean isHttpOnly()  
  29. setHttpOnly() : Koristi se za postavljanje je li ovaj kolačić samo http ili nije.
        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.
  30. domainMatches() : Pomoćna funkcija za provjeru je li naziv hosta u domeni ili ne.
        Syntax :     public static boolean domainMatches(String domain   
    String host)
    Parameters :
    domain : domain to check hostname with
    host : host to check
  31. toString() : Konstruira prikaz niza ovog kolačića.
           Syntax :    public String toString()  
  32. jednako() : vraća true ako su dva http kolačića međusobno jednaka false inače.
           Syntax :    public boolean equals(Object obj)  
  33. hashCode() : Vrati hash kod ovog http kolačića. Rezultat je zbroj vrijednosti hash koda triju značajnih komponenti ovog kolačića: domene naziva i putanje. Nadjačava hashCode u klasi Object.
        Syntax :     public int hashCode()  
  34. klon() : Stvorite i vratite kopiju ovog objekta. Nadjačava metodu kloniranja klase objekta.
        Syntax :     public Object clone()  

Implementacija Jave:

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  ());      }   }   

Izlaz:

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

Još jedan primjer koji pokazuje kako web poslužitelji zapravo koriste kolačiće u kojima ispisujemo pojedinosti o kolačićima koje pohranjuje www.facebook.com

Java
   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  ());      }      }   }   

Izlaz:

 ------------------ 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

Referenca:

Službena Java dokumentacija

Napravi kviz