Al giorno d'oggi la maggior parte dei siti web necessitano di cookie attivi per funzionare. Non ci sono più ragioni di sicurezza ad impedirne l'utilizzo, quindi può essere utile avvisare l'utente che per utilizzare il sito (o una sua parte) è necessario averli abilitati, ad esempio per sfruttare la Forms Authentication di ASP.NET.
Si potrebbe arrivare allo stesso risultato con un controllo all'interno di una semplice pagina, ma in questo esempio vediamo un HttpModule che consente di creare una soluzione più elegante ed applicabile a tutte le pagine del sito, a prescindere da quale sia la prima che l'utente richiede.
Il test è molto semplice: viene intercettato l'evento che si scatena quando comincia la richiesta della pagina, viene quindi creato un cookie e fatto un redirect ad un'altra pagina (fittizzia) che serve per verificare se il browser ha salvato il cookie e l'ha inviato nuovamente al client.
A questo punto si viene rimandati ad una pagina nocookie.aspx qualora il cookie non sia presente, oppure si passa alla pagina inizialmente richiesta se il browser li supporta.
using System;
using System.Web;
namespace ASPItalia.com
{
public class CookieModule : IHttpModule
{
public void Init(HttpApplication Application)
{
// registriamo l'event handler
Application.BeginRequest += new EventHandler(this.BeginRequest) ;
}
public void Dispose()
{
// niente!
}
private void BeginRequest(object objSender, EventArgs objEventArgs)
{
HttpResponse Response = HttpContext.Current.Response;
HttpRequest Request = HttpContext.Current.Request;
string url = Request.Url.ToString();
// il cookie non esiste
if (Request.Cookies["cookietest"] == null)
{
// redir su pagina che mostra avviso di mancanza di cookie
// non siamo sulla pagina di test del cookie
if (url.IndexOf("cookietest.aspx") == -1 && url.IndexOf("nocookie.aspx") == -1)
{
// scrivi cookie
Response.Cookies["cookietest"].Value = "test";
// redir a pagina intermedia
Response.Redirect("cookietest.aspx?ReturnUrl=" + HttpContext.Current.Server.UrlEncode(url) );
}
else if (url.IndexOf("nocookie.aspx") == -1)
Response.Redirect("nocookie.aspx");
}
}
}
}Nell'allegato sono contenuti i file di appoggio, che possono essere implementati, per maggior eleganza, con un HttpHandler ed il web.config con la sezione di registrazione dell'HttpModule appena creato.
- #941 - Gestire al meglio gli eventi RowCommand di GridView e ItemCommand di DetailsView e FormsView con la classe DataControlCommands
- Rilasciata la Preview 2 di ASP.NET AJAX 4.0.
- Membership API per SQL Server anche senza dbo
- ListView è DataPager
- #944 - Inviare file di grandi dimensioni con un HttpHandler di ASP.NET
- Il nostro nuovo imminente libro in prenotazione: ASP.NET 3.5 per tutti
- #948 - Recuperare l'ID del controllo che ha scatenato l'AsyncPostBack con ASP.NET AJAX
- #922 - Utilizzare il metodo Page.SetFocus per impostare il focus all'interno della form
- #926 - Autenticazione con Membership API e selezione del dominio per Active Directory
- Architettura del software: le applicazioni web a tre livelli
- Dal MIX08 la Preview2 di ASP.NET MVC
- #918 - Control adapter per cambiare l'output dei controlli di ASP.NET 2.0
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!