Redazione
a- a+

Creare, leggere e gestire i cookie con ASP.NET

Vediamo come scrivere, leggere e gestire i cookie in modo facile e veloce. Codice ed esempi.

Un cookie è un file di testo contenente informazioni che possono essere lette, interpretate e messe in atto dall’applicazione  web ogni volta che l’utente visita il sito. Ad esempio, se un utente richiede una pagina di un sito, l’applicazione non invia solo la pagina ma anche un cookie contenente per esempio URL del sito, data e ora. Al momento della visualizzazione della pagina anche il browser riceve il cookie e lo memorizza in una cartella sul disco rigido dell’utente. Se in un secondo momento l’utente richiede nuovamente una pagina dello stesso sito, il browser cercherà nel disco rigido locale il cookie associato all’URL. Se il cookie esiste, il browser lo invia al sito con la richiesta della pagina. L’applicazione può quindi determinare la data e l’ora dell’ultima visita dell’utente. È possibile utilizzare queste informazioni per visualizzare un messaggio per l’utente o per controllare una data di ultima visita del sito in modo da avere una statistica su quanto e con che frequenza è visitato. Dobbiamo tenere bene in mente che i cookie vengono associati ad un sito web e non a una pagina specifica; pertanto, il browser e il server scambiano le informazioni relative ai cookie indipendentemente dalla pagina del sito richiesta dall’utente. Ogni volta che un utente visita un sito diverso, questo può inviare un cookie al browser dell’utente, che memorizza tutti i cookie separatamente.

Più in generale, i cookie rappresentano un modo per mantenere la continuità in un’applicazione web, vengono utilizzati per diversi scopi che consentono ai siti web di ricordare gli utenti e di evitare informazioni ripetitive. Ad esempio, un cookie può essere utilizzato semplicemente come valore booleano in un sito sul quale viene condotto un sondaggio, per indicare se il browser di un utente ha già partecipato e non consentire, quindi, all’utente di votare due volte. Oppure su un sito che richiede all’utente di eseguire l’accesso si può utilizzare un cookie per registrare l’account dell’utente in modo da non dover richiedere sempre l’inserimento delle credenziali. In questo ultimo esempio bisogna stare attenti soprattutto per motivi di sicurezza, nel caso il computer client non sia di uso esclusivo del visitatore ma anche di altre persone.

Per  scrivere un cookie, ASP.NET mette a disposizione due strade:

  • Impostando le proprietà del cookie nell’insieme Cookies
  • Creando un’istanza dell’oggetto HttpCookie e aggiungerla all’insieme Cookies.

I cookie vanno creati prima che venga eseguito il rendering della pagina ASP.NET sul client. Ciò vuol dire che è possibile scrivere un cookie in un gestore eventi Page_Load, ma non in un gestore eventi Page_Unload.

Vediamo con degli esempi pratici come utilizzare le due procedure:

Iniziamo con il primo metodo: impostare le  proprietà nell’insieme Cookies.

Nell’esempio viene illustrato un cookie denominato ImpostazioniUtente, in cui sono impostati i valori di Font e Color. La data di scadenza è inoltre impostata al giorno successivo.

Response.Cookies["ImpostazioniUtente"]["Font"] = "Arial";
Response.Cookies["ImpostazioniUtente"]["Color"] = "Blue";
Response.Cookies["ImpostazioniUtente"].Expires = DateTime.Now.AddDays(1d);

In questo modo nel cookie vengono salvate il valore del colore del testo “Blue” e il font “Arial”. Al successivo ritorno nel sito l’utente avrà come stile del carattere queste due impostazioni di base.

Passiamo al secondo metodo: scrivere un cookie creando un’istanza dell’oggetto HttpCookie.

  • Si crea un oggetto di tipo HttpCookie e si nomina.
  • Si assegnano i valori alle sottochiavi del cookie e si impostano tutte le proprietà del cookie.
  • Si aggiunge il cookie all’insieme Cookies.
HttpCookie mioCookie = new HttpCookie("ImpostazioniUtente");
mioCookie ["Font"] = "Arial";
mioCookie ["Color"] = "Blue";
mioCookie.Expires = DateTime.Now.AddDays(2d);
Response.Cookies.Add(mioCookie);

Nel codice di esempio abbiamo creato un oggetto di tipo HttpCookie denominato mioCookie, che rappresenta un cookie denominato ImpostazioniUtente, in cui come nel precedente esempio, sono fissati i valori di Font e Color. La data di scadenza è sempre impostata al giorno successivo.

Una volta imparato a scrivere i cookie dobbiamo anche poterli leggere per estrarre ed utilizzare i valori in esso contenuti. È possibile leggere solamente i cookie creati dalle pagine nel dominio o percorso corrente.

Per leggere una stringa dall’insieme Cookies si utilizza il nome del cookie come chiave per estrarre i valori in esso contenuti.

if (Request.Cookies["ImpostazioniUtente"] != null)
{
    string FontUtente;
    string ColorUtente;
    if (Request.Cookies["ImpostazioniUtente"]["Font"] != null)
    { ImpostazioniUtente = Request.Cookies["ImpostazioniUtente"]["Font"]; }
if (Request.Cookies["ImpostazioniUtente"]["Color"] != null)
    { ColorUtente = Request.Cookies["ImpostazioniUtente"]["Color"]; }

}
Prima di tutto controlliamo che il cookie “ImpostazioniUtente” esista e non sia nullo 
if (Request.Cookies["ImpostazioniUtente"] != null)

Con Request.Cookie possiamo leggere i contenuti memorizzati.

Per leggere le sottochiavi dobbiamo usare il nome del cookie e il nome della sottochiave:

if (Request.Cookies["ImpostazioniUtente"]["Font"] != null)
    { ImpostazioniUtente = Request.Cookies["ImpostazioniUtente"]["Font"]; }
if (Request.Cookies["ImpostazioniUtente"]["Color"] != null)
    { ColorUtente = Request.Cookies["ImpostazioniUtente"]["Color"]; }

Negli esempi abbiamo usato la data di scadenza: serve a rimuovere i cookie alla loro scadenza prefissata da codice. Quando il visitatore invierà una richiesta a una pagina che si trova nel dominio o sul percorso che ha impostato il cookie, il browser rileverà il cookie, controllerà la data di scadenza e se è scaduto lo eliminerà.  La rimozione del cookie avviene mediante una chiamata al metodo Remove dell’insieme Cookies sul lato server. Il cookie non verrà quindi inviato al client. Tuttavia, se il cookie è già presente sul client, il metodo non lo rimuove.

  • Determinare se il cookie è presente e, in caso affermativo, crearne uno nuovo con lo stesso nome.
  • Impostare la data di scadenza del cookie.
  • Aggiungere il cookie all’oggetto Collection Cookies.
HttpCookie mioCookie = new HttpCookie("ImpostazioniUtente ");
mioCookie.Expires = DateTime.Now.AddDays(2d);
Response.Cookies.Add(mioCookie);

Nell’esempio abbiamo impostato la data di scadenza a 2 giorni dalla data di creazione. Passati i 2 giorni il cookie verrà rimosso.  Da tenere presente che se dopo la scadenza il visitatore ritornerà su una pagina che si trova nel dominio o sul percorso che ha impostato il cookie, il server imposterà un nuovo cookie sempre con scadenza a 2 giorni dopo la sua creazione. Il meccanismo dei cookie con scadenza è utile per tenere aggiornate le informazioni all’interno dei cookie stessi.

Il codice completo di esempio è il seguente:

using System;
using System.Data;
using System.Web;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
       // creo il cookie
	HttpCookie mioCookie = new HttpCookie("ImpostazioniUtente");
	mioCookie ["Font"] = "Arial"; // registro I valori per il Font
	mioCookie ["Color"] = "Blue"; // registro I valori per il colore del testo
	// imposto la nuova data di scadenza al cookie	
	mioCookie.Expires = DateTime.Now.AddDays(2d); 
	Response.Cookies.Add(mioCookie);

     // leggo il cookie se esiste
       if (Request.Cookies["ImpostazioniUtente"] != null)
	{
	string FontUtente;
 	string ColorUtente;
	// leggo i valori delle sottochiavi 
  	  if (Request.Cookies["ImpostazioniUtente"]["Font"] != null)
 	   { ImpostazioniUtente = Request.Cookies["ImpostazioniUtente"]["Font"]; }
	  if (Request.Cookies["ImpostazioniUtente"]["Color"] != null)
   	   { ColorUtente = Request.Cookies["ImpostazioniUtente"]["Color"]; }

	}
    }
}



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Francesco
Hai dubbi su questo articolo?