Java.net.HttpCookie i Java
Forutsetning - Informasjonskapsler
Mange nettsteder bruker små tekststrenger kjent som informasjonskapsler for å lagre vedvarende klientsidetilstand mellom tilkoblinger. Informasjonskapsler sendes fra server til klient og tilbake igjen i HTTP-hodene til forespørsler og svar. Informasjonskapsler kan brukes av en server for å indikere økt-ID-er for innhold i handlekurven påloggingsinformasjon brukerpreferanser og mer. Et HttpCookie-objekt representerer en http-informasjonskapsel som bærer tilstandsinformasjon mellom server og brukeragent. Informasjonskapsler er allment tatt i bruk for å lage stateful sesjoner. Det er 3 spesifikasjoner for http-informasjonskapsler:
HttpCookie-klassen kan godta alle disse 3 formene for syntaks.
Konstruktør:
Oppretter en informasjonskapsel med det angitte navnet og verdien. Navnet må kun inneholde alfanumeriske ASCII-tegn og samsvare med RFC 2965. Det gir et IllegalArgument-unntak hvis navnet ikke er riktig eller NullPointerException hvis navnet er null. Verdien kan være alt du vil lagre.
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 informasjonskapsler analysert fra overskriftsstreng. header må begynne med set-cookie eller set-cookie2 token eller må ikke inneholde noen token i det hele tatt.
Syntax : public static List parse(String header)
Parameters :
header : String to be parsed as cookies- hasExpired(): returnerer boolsk verdi som indikerer om informasjonskapselen har utløpt eller ikke.
Syntax : public boolean hasExpired()- setComment() : Brukes til å angi en kort beskrivelse som beskriver formålet med informasjonskapselen. Den brukes når informasjonskapselen skal presenteres for brukeren.
Syntax : public void setComment(String purpose)
Parameters :
purpose : purpose of cookie- getComment(): Returnerer beskrivelsen av informasjonskapselen eller null hvis informasjonskapselen ikke har noen kommentarer.
Syntax : public void getComment()- setCommentURL() : Brukes til å angi en kort kommentar-url som beskriver formålet med informasjonskapselen. Den brukes når nettleseren presenterer informasjonskapselen til brukeren.
Syntax : public void setCommentURL(String purpose)
Parameters :
purpose : purpose of cookie- getCommentURL() : Returnerer URL-kommentaren til informasjonskapselen eller null hvis informasjonskapselen ikke har noen URL-kommentarer.
Syntax : public String getComment()- setDiscard(): Brukes til å angi om brukeragenten skal forkaste denne informasjonskapselen eller ikke.
Syntax : public void setDiscard(Boolean discard)
Parameters :
discard : true if UA should discard otherwise false- getDiscard(): Returnerer tilstanden til forkastvariabelen satt av setDiscard()-metoden. Returnerer mer spesifikt sant hvis UA skal forkaste denne informasjonskapselen ellers falsk.
Syntax : public Boolean getDiscard()- setPortList(): Brukes til å spesifisere portene som denne informasjonskapselen kan bruke.
Syntax : public void setPortList(String portList)
Parameters :
portList : String of comma separated digits specifying the ports.- getPortList() : Returnerer listen over porter som denne informasjonskapselen kan bruke.
Syntax : public String getPortList()- setDomain(): Spesifiser domenet der denne informasjonskapselen skal være synlig. For eksempel vil informasjonskapsler sendt fra en servlet på bali.vacations.com normalt ikke bli returnert av nettleseren til sidene på queensland.vacations.com. Hvis nettstedet ønsket at dette skulle skje, kunne servletene spesifisere cookie.setDomain(.vacations.com). For å hindre servere i å sette informasjonskapsler som gjelder for verter utenfor deres domene, må det angitte domenet oppfylle følgende krav: det må starte med en prikk (f.eks. .coreservlets.com).
Syntax : public void setDomain(String domain)
Parameters :
domain : String representing the domain in which this cookie is visible- getDomain(): Returnerer domenet der denne informasjonskapselen er synlig.
Syntax : public String getDomain()- setMaxAge(): brukes til å angi maks. alder for informasjonskapsler i sekunder. Den spesifiserer den maksimale tiden etter opprettelse av informasjonskapselen som den er i live for. Negative verdier spesifiserer at informasjonskapselen vil utløpe så snart nettleseren avsluttes.
Syntax : public void setMaxAge(long age)
Parameters :
age : Max survive time in seconds- getMaxAge() : Returnerer maks. alder for informasjonskapsler.
Syntax : public long getMaxAge()- setPath(): Brukes til å spesifisere banen til klienten der den skal returnere informasjonskapselen. Denne informasjonskapselen er synlig for alle sidene og underkatalogene til den angitte banen. Hvis for eksempel serveren sendte informasjonskapselen fra http://ecommerce.site.com/toys/specials.html, vil nettleseren sende informasjonskapselen tilbake når den kobles 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 banen satt for denne informasjonskapselen.
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 ()); } }- Produksjon
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(): Indikert om sikker protokoll skal brukes under sending av denne informasjonskapselen. Standardverdien 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 sann hvis denne informasjonskapselen må sendes med en sikker protokoll ellers falsk.
Syntax : public boolean getSecure()- getName(): Returnerer navnet på informasjonskapselen.
Syntax : public String getName()- setValue(): Tildeler ny verdi til informasjonskapselen etter initialisering.
Syntax : public void setValue(String newValue)
Parameters :
newValue - a String specifying the new value- getValue: Returnerer verdien av informasjonskapselen.
Syntax : public String getValue()- getVersion(): Returnerer 0 hvis informasjonskapselen samsvarer med den originale Netscape-spesifikasjonen; 1 hvis informasjonskapselen er i samsvar med RFC 2965/2109
Syntax : public int getVersion()- setVersion(): Brukes til å angi versjonen av informasjonskapselprotokollen denne informasjonskapselen bruker.
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 sant hvis informasjonskapselen kun kan brukes av http, dvs. den kan ikke brukes av skriptspråk som JS vb etc.
Syntax : public boolean isHttpOnly()- setHttpOnly(): Brukes til å angi om denne informasjonskapselen kun er http eller ikke.
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(): Verktøyfunksjon for å sjekke om vertsnavn er i domene eller ikke.
Syntax : public static boolean domainMatches(String domain
String host)
Parameters :
domain : domain to check hostname with
host : host to check- toString() : Konstruerer en strengrepresentasjon av denne informasjonskapselen.
Syntax : public String toString()- lik() : returnerer true hvis to http-informasjonskapsler er lik hverandre false ellers.
Syntax : public boolean equals(Object obj)- hashCode(): Returner hash-koden til denne http-informasjonskapselen. Resultatet er summen av hashkodeverdien til tre viktige komponenter i denne informasjonskapselen: navn på domene og bane. Overstyrer hashCode i klasseobjekt.
Syntax : public int hashCode()- klone() : Opprett og returner en kopi av dette objektet. Overstyrer klonemetoden 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 ()); } }Utgang:
Secure : true
Name : First
Value : 2
Version : 1
is HTTP only : true
toString : First='2'
Hashcode : 97440432Et annet eksempel for å vise hvordan informasjonskapsler faktisk brukes av nettservere der vi skriver ut informasjon om informasjonskapsler lagret av 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 ()); } } }Utgang:
------------------ 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: 0Referanse:
Offisiell Java-dokumentasjonLag quiz