
Quando si creano siti web o applicazioni Asp.Net piuttosto complesse, è necessario saper manipolare i cookie del client per poter eseguire efficacemente certe operazioni (ad esempio l'autenticazione ad un sito).
In Asp.Net, la manipolazione indipendente dei
cookies presenti sul client, risulta molto semplice se utilizziamo la classe
HttpCookie.
Con questa classe possiamo salvare cookies personalizzati sul client per poi riaprirli in un secondo momento. Allo stesso modo possiamo anche modificarne il contenuto o eliminarli, in poche parole una gestione completa dei cookies tuto esclusivamente lato server e con Asp.net.
Ora vediamo come è possibile eseguire tutto questo.
Creazione e salvataggio di un cookie sul client
Ora creaiamo una funzione che genera un cookie con nome e data di scadenza da noi scleti.
Se tutto fila liscio ed il cookie viene creato, la nostra funzione restituirà un valore booleano True, altrimenti restituirà False
Public Function CreateCookie(CookieName As String, ExpirationDate As Date) As Boolean
Try
'creo il cookie e gli passo il nome
Dim biscotto As New HttpCookie(CookieName)
'gli asegno una chiave univoca
Dim chiaveunivoca As String = System.Guid.NewGuid().ToString()
biscotto("id") = chiaveunivoca.ToString
'imposto una data di scadenza
biscotto.Expires = ExpirationDate
'Salvo il cookie sul client
HttpContext.Current.Response.Cookies.Add(biscotto)
Return True
Catch ex As Exception
Return False
End Try
End Function
Eliminazione di un cookie dal client
Analogamente creaimo una funzione che eliminerà il nostro cookie anche se il suo periodo di vita non è ancora terminato.
Questa funzione recupererà il cookie tramite il suo nome e restituirà True in caso di eliminazione avvenuta altrimenti False.
Public Function DeleteCookie(cookieName As String) As Boolean
'verifico se il cookie esiste
If (Not HttpContext.Current.Request.Cookies(cookieName) Is Nothing) Then
'recupero il cookie tramite il nome
Dim myCookie As HttpCookie
myCookie = New HttpCookie(cookieName)
'elimino un giorno dalla data odierna e
'passo la nuova data al cookie da eliminare
myCookie.Expires = DateTime.Now.AddDays(-1D)
HttpContext.Current.Response.Cookies.Add(myCookie)
Return True
Else
Return False
End If
End Function
In pratica ho dato al cookie una data di scadenza già passata e quindi il client lo eliminerà.
Aggiungere valori al cookie
Creaimo un'altra funzione, che restituisca sempre un valore boolenao in base all'esito dell'operazione, ma questa volta la useremo per scrivere valori all'interno del nostro cookie.
Public Function SetValue(CookieName As String, Key As String, Value As String) As Boolean
'verifico che il cookie esista
If (HttpContext.Current.Request.Cookies(CookieName) IsNot Nothing) Then
Try
'recupero il cookie
Dim oldCookie As HttpCookie = HttpContext.Current.Request.Cookies(CookieName)
'recupero la data di scadenza
Dim expirationTime As Date = oldCookie.Expires
'recupero tutti i valori del cookie
Dim oldValues As NameValueCollection = oldCookie.Values
'aggiungo il nuovo valore
oldValues.Remove(Key)
oldValues.Add(Key, Value)
'creo il nuovo cookie
Dim myCookie As HttpCookie = New HttpCookie(CookieName)
myCookie.Values.Add(oldValues)
myCookie.Expires = expirationTime
HttpContext.Current.Response.Cookies.Add(myCookie)
oldCookie = Nothing
expirationTime = Nothing
oldValues = Nothing
Return True
Catch ex As Exception
Return False
End Try
Else
Return False
End If
End Function
Questa funzione richiede tre parametri:
CookieName: il nome del cookie al quale vogliamo aggingere il valore
Key: chiave univoca da associare al valore
Value: valore passato al cookie per essere registrato
Recuperare un valore dal cookie
Analogamente a come fatto in precedenza creiamo una funzione per recuperare un valore dal cookie.
Public Function GetValue(CookieName As String, Key As String) As String
'verifico che il cookie esista
If (HttpContext.Current.Request.Cookies(CookieName) IsNot Nothing) Then
'varifico che la chiave esista
If (HttpContext.Current.Request.Cookies(CookieName)(Key) IsNot Nothing) Then
Return HttpContext.Current.Request.Cookies(CookieName)(Key)
Else
Return "null"
End If
Else
Return "null"
End If
End Function
Questa funzione richiede come parametri:
CookieName: il nome dael cookie dal quale recuperare il valore
Key: la chiave univoca associata al valore da recuperare
Conclusioni
Con poco sforzo abbiamo elaborato 4 funzioni utilissime per salvare, eliminare, scrivere e leggere i cookie.
Ora possiamo utilizzarle come vogliamo in ogni nostra applicazione Asp.Net.
es.
'creo il mio cookie
CreateCookie("myCookie", now.AddHours(3))
'salvo al suo interno due valori
SetValue("myCookie","Nome","Filippo")
SetValue("myCookie","Cognome","Amadori")
'recupero i due valori dal cookie
Dim Nome as String = GetValue("myCookie","Nome")
Dim Cognome as String = GetValue("myCookie","Cognome")
Response.Write(Nome & " " & Cognome)
'elimino il cookie
DelewteCookie("myCookie")
Spero di che vi sia piaciuto... Un saluto al prossimo articolo.