#640 - Un HttpModule per verificare il supporto per i cookie

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.

Nota: Questo script contiene un allegato.


Approfondimenti

Commenti

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.




IN EVIDENZA
MISC