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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Sfruttare i tag nell'output cache di ASP.NET Core 7
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Gestire dati sensibili nella configurazione in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Utilizzare parametri a livello di controller nel routing di ASP.NET Core
Taggare la output cache in base al routing in ASP.NET Core