Un HttpModule per verificare il supporto per i cookie

di Daniele Bochicchio, in ASP.NET, HttpModule, web.config,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi