Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java: classi e metodi per la gestione dei cookie

Scopriamo quali classi e quali metodi vengono messi a disposizione dal linguaggio Java per gestire i cookie e gli stati conversazionali tra client e server
Scopriamo quali classi e quali metodi vengono messi a disposizione dal linguaggio Java per gestire i cookie e gli stati conversazionali tra client e server
Link copiato negli appunti

Il protocollo HTTP è di tipo stateless, esso infatti non mantiene informazioni di stato tra successive richieste di uno stesso client. Quanto appena detto esprime il seguente comportamento di un server: una successione di richieste di uno stesso client vengono viste come se effettuate ogni volta da un client diverso.

I cookie invece, sono dei contenuti informativi che permettono la gestione di uno stato conversazionale tra client e server. Con i Cookie, ad esempio, un server sarà in grado di riconoscere che una determinata richiesta HTTP provieneda uno specifico client.

CookieHandler

La classe java.net.CookieHandler fornisce un meccanismo di callback per decorare il protocollo HTTP con una policy di gestione dello stato tra client e server. Un oggetto di questa classe rappresenta un manager dello stato a livello di sistema. CookieHandler è una classe astratta che definisce i metodi per la creazione e il recupero dei cookie, un Cookie Handler deve quindi estendere questa classe ed implementare i seguenti metodi astratti:

  • put(URI uri, Map<String,List<String>> responseHeaders) per salvare tutti i cookie di una response HTTP all'interno del Cookie Store
  • get(URI uri, Map<String,List<String>> requestHeaders) per recuperare tutti i cookie salvati ed aggiungerli alla mappa requestHeaders

Una volta creata la classe che definisce un Cookie Handler, utilizziamo il metodo statico setDefault(CookieHandler) per impostare una sua istanza come Cookie Handler a livello di sistema. Le API Java forniscono un'implementazione di default attraverso la classe java.net.CookieManager:

CookieManager cookieHandler = new CookieManager();
CookieHandler.setDefault(cookieHandler);

Dobbiamo evidenziare che il Cookie Store di default rappresenta una memoria volatile, il suo tempo di vita è infatti legato a quello della JVM in esecuzione. Per potere avere una memoria persistente è necessario implementare un Cookie Store personalizzato.

Altro aspetto importante da sottolineare è la policy di default che stiamo utilizzando. L'implementazione predefinita, infatti, è settata sul valore java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER che ha come effetto quello di accettare solo cookie provenienti dal server contattato originalmente, eventuali cookie provenienti da un Proxy Server, ad esempio, verrebbero respinti.

CookiePolicy

L'interfaccia CookiePolicy fornisce delle implementazioni di default per la policy di gestione dei cookie. Le implementazioni che è possibile utilizzare sono le seguenti:

  • CookiePolicy.ACCEPT_ORIGINAL_SERVER, vengono salvati solo cookie del server originale;
  • CookiePolicy.ACCEPT_ALL, vengono salvati tutti i cookie;
  • CookiePolicy.ACCEPT_NONE, non viene salvato alcun cookie.

Possiamo impostare la policy desiderata attraverso il metodo setCookiePolicy() della classe CookieManager. Ad esempio volendo accettare tutti i cookie utilizziamo CookiePolicy.ACCEPT_ALL:

CookieManager cookieHandler=new CookieManager();
cookieHandler.setCookiePolicy(CookiePolicy.ACCEPT_ALL);

CookieStore

I cookie ricevuti dal server vengono salvati dal Cookie Handler nel CookieStore di default che perde ogni informazione non appena avviene un restart della JVM. Per poter conservare i Cookie occorre un'implementazione personalizzata dell'interfaccia java.net.CookieStore.

Un aspetto importante da sottolineare è l'impossibilità di settare un CookieStore dopo la creazione di un CookieManager. Ciò che invece possiamo fare è sfruttare il costruttore CookieManager(CookieStore store, CookiePolicy cookiePolicy) della classe CookieManager fornendo uno store ed una policy nel momento di creazione del CookieHandler.

Nei prossimi articoli scopriremo come ottenere i Cookie ricevuti dal server e come implementare una nostra Policy ed un nostro CookieStore.

Ti consigliamo anche