23 agosto 2011

Scrivere e leggere i cookies con Asp.Net

Autore: Filippo Amadori
Gestire i cookie con Asp.NetQuando 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.



TAG:
CATEGORIE:
 

Post Correlati

Lascia un commento