Java.net.HttpCookie i Java
Forudsætning - Cookies
Mange websteder bruger små tekststrenge kendt som cookies til at gemme vedvarende klientsidetilstand mellem forbindelser. Cookies sendes fra server til klient og tilbage igen i HTTP-headerne for anmodninger og svar. Cookies kan bruges af en server til at angive sessions-id'er indkøbskurvs indhold login-legitimationsoplysninger brugerpræferencer og mere. Et HttpCookie-objekt repræsenterer en http-cookie, som bærer tilstandsinformation mellem server og brugeragent. Cookie bruges bredt til at skabe statelige sessioner. Der er 3 http-cookie-specifikationer:
HttpCookie-klassen kan acceptere alle disse 3 former for syntaks.
Konstruktør:
Opretter en cookie med det angivne navn og værdi. Navnet skal kun indeholde alfanumeriske ASCII-tegn og være i overensstemmelse med RFC 2965. Det kaster en IllegalArgument-undtagelse, hvis navnet ikke er korrekt, eller NullPointerException, hvis navnet er null. Værdien kan være alt, hvad cookie ønsker at gemme.
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 nullMetoder:
- parse(): returnerer en liste over cookies, der er parset fra overskriftsstrengen. header skal begynde med set-cookie eller set-cookie2-token eller må slet ikke indeholde nogen token.
Syntax : public static List parse(String header)
Parameters :
header : String to be parsed as cookies- hasExpired(): returnerer boolesk værdi, der angiver, om cookien er udløbet eller ej.
Syntax : public boolean hasExpired()- setComment(): Bruges til at angive en kort beskrivelse, der beskriver formålet med cookien. Den bruges, når cookien skal præsenteres for brugeren.
Syntax : public void setComment(String purpose)
Parameters :
purpose : purpose of cookie- getComment(): Returnerer beskrivelsen af cookien eller null, hvis cookien ikke har nogen kommentarer.
Syntax : public void getComment()- setCommentURL(): Bruges til at angive en kort kommentar-url, der beskriver formålet med cookien. Den bruges, når browseren præsenterer cookien for brugeren.
Syntax : public void setCommentURL(String purpose)
Parameters :
purpose : purpose of cookie- getCommentURL(): Returnerer URL-kommentaren for cookien eller null, hvis cookien ikke har nogen URL-kommentarer.
Syntax : public String getComment()- setDiscard(): Bruges til at indstille, om brugeragenten skal kassere denne cookie eller ej.
Syntax : public void setDiscard(Boolean discard)
Parameters :
discard : true if UA should discard otherwise false- getDiscard(): Returnerer tilstanden for kasseringsvariabel indstillet af setDiscard()-metoden. Mere specifikt returnerer true, hvis UA skal kassere denne cookie ellers falsk.
Syntax : public Boolean getDiscard()- setPortList(): Bruges til at angive de porte, som denne cookie kan bruge.
Syntax : public void setPortList(String portList)
Parameters :
portList : String of comma separated digits specifying the ports.- getPortList(): Returnerer listen over porte, som denne cookie kan bruge.
Syntax : public String getPortList()- setDomain(): Angiv det domæne, hvor denne cookie skal være synlig. For eksempel ville cookies sendt fra en servlet på bali.vacations.com normalt ikke blive returneret af browseren til siderne på queensland.vacations.com. Hvis webstedet ønskede, at dette skulle ske, kunne servlets angive cookie.setDomain(.vacations.com). For at forhindre servere i at indstille cookies, der gælder for værter uden for deres domæne, skal det angivne domæne opfylde følgende krav: Det skal starte med en prik (f.eks. .coreservlets.com).
Syntax : public void setDomain(String domain)
Parameters :
domain : String representing the domain in which this cookie is visible- getDomain(): Returnerer det domæne, hvor denne cookie er synlig.
Syntax : public String getDomain()- setMaxAge(): bruges til at indstille maks. alder for cookie i sekunder. Den angiver den maksimale tid efter oprettelse af cookie, som den er i live for. Negative værdier angiver, at cookien udløber, så snart browseren afsluttes.
Syntax : public void setMaxAge(long age)
Parameters :
age : Max survive time in seconds- getMaxAge(): Returnerer den maksimale alder for cookie.
Syntax : public long getMaxAge()- setPath(): Bruges til at angive stien til klienten, hvor den skal returnere cookien. Denne cookie er synlig for alle sider og undermapper til den angivne sti. Hvis f.eks. serveren sendte cookien fra http://ecommerce.site.com/toys/specials.html, ville browseren sende cookien tilbage, når den oprettede forbindelse til http://ecommerce.site.com/to/beginners.html, men ikke til http://ecommerce.site.com/c/classic.html.
Syntax : public void setPath(String uri)
Parameters :
uri - a String specifying a path- getPath(): Returnerer stien indstillet til denne cookie.
Syntax : public String getPath()- Java Implementering:
- 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 ()); } }- Produktion
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- setSecure(): Angivet om sikker protokol skal bruges under afsendelse af denne cookie. Standardværdien er falsk.
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(): Returnerer sandt, hvis denne cookie skal sendes af en sikker protokol ellers falsk.
Syntax : public boolean getSecure()- getName(): Returnerer navnet på cookien.
Syntax : public String getName()- setValue(): Tildeler ny værdi til cookie efter initialisering.
Syntax : public void setValue(String newValue)
Parameters :
newValue - a String specifying the new value- getValue: Returnerer værdien af cookien.
Syntax : public String getValue()- getVersion(): Returnerer 0, hvis cookien overholder den originale Netscape-specifikation; 1, hvis cookien overholder RFC 2965/2109
Syntax : public int getVersion()- setVersion(): Bruges til at indstille versionen af cookie-protokollen, som denne cookie bruger.
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- isHttpOnly(): Returnerer sand, hvis cookie kun kan bruges af http, dvs. den kan ikke bruges af scriptsprog som JS vb osv.
Syntax : public boolean isHttpOnly()- setHttpOnly(): Bruges til at indstille, om denne cookie kun er http eller ej.
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.- domainMatches(): Hjælpefunktion til at kontrollere, om værtsnavnet er i domænet eller ej.
Syntax : public static boolean domainMatches(String domain
String host)
Parameters :
domain : domain to check hostname with
host : host to check- toString(): Konstruerer en strengrepræsentation af denne cookie.
Syntax : public String toString()- er lig med(): returnerer sand, hvis to http-cookies er lig med hinanden falsk ellers.
Syntax : public boolean equals(Object obj)- hashCode(): Returner hash-koden for denne http-cookie. Resultatet er summen af hash-kodeværdien af tre væsentlige komponenter i denne cookie: navn domæne og sti. Tilsidesætter hashCode i klasseobjekt.
Syntax : public int hashCode()- clone(): Opret og returner en kopi af dette objekt. Tilsidesætter klonmetoden for objektklassen.
Syntax : public Object clone()Java Implementering:
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 ()); } }Output:
Secure : true
Name : First
Value : 2
Version : 1
is HTTP only : true
toString : First='2'
Hashcode : 97440432Et andet eksempel til at vise, hvordan cookies faktisk bruges af webservere, hvor vi udskriver detaljerne om cookies, der er gemt af www.facebook.com
Javaimport 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 ()); } } }Output:
------------------ 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: 0Reference:
Officiel Java-dokumentationOpret quiz