Cookies en ASP.NET

Las cookies son una parte muy importante en todas las aplicaciones Web.

Si bien nunca se recomienda basar una aplicación en el funcionamiento de las cookies (ya que el usuario siempre puede borrarlas y/o modificarlas), éstas nos ofrecen la posibilidad a los webmasters de dar muchos y buenos servicios a nuestros usuarios.

Y como siempre, si unimos la palabra webmaster con la de ASP.NET, nos da como resultado la facilidad. Y es que si trabajar con cookies ha sido siempre sencillo en antiguos lenguajes como ASP o PHP, con ASP.NET lo es mucho más, pero además se le une la orientación a objetos y el tipado de las cookies.

En ASP.NET las cookies se manejan con HttpCookie, que está dentro del namespace System.Web.

Pero vayamos al grano con los usos típicos que se les hace a las cookies:

1.- Crear una cookie
        // Creamos elemento HttpCookie con su nombre y su valor
        HttpCookie addCookie = new HttpCookie("subgurim", DateTime.Now.ToString());
       
        // Si queremos le asignamos un fecha de expiración: mañana
        addCookie.Expires = DateTime.Today.AddDays(1).AddSeconds(-1);
       
        // Y finalmente ñadimos la cookie a nuestro usuario
        Response.Cookies.Add(addCookie);


2.- Recoger una cookie
        // Recogemos la cookie que nos interese
        HttpCookie cogeCookie = Request.Cookies.Get("subgurim");

        // O a la antigua usanza, que es lo mismo pero me gusta menos
        // HttpCookie cogeCookie = Request.Cookies["subgurim"];

        // O mostramos todas las cookies por pantalla
        foreach (HttpCookie cookie in Request.Cookies)
        {
            Response.Write(cookie.Name + ":" + cookie.Value + "<br />");
        }



3.- Modificar una cookie
        // Puede darse el caso que lo que queramos es modificar una cookie
        // Por ejemplo vamos a cambiar el tiempo de expiración de la cookie que creamos al principio
        HttpCookie modificaCookie = Request.Cookies.Get("subgurim");
        modificaCookie.Expires = DateTime.Now.AddDays(7);
        Response.Cookies.Set(modificaCookie);


4.- Borrar una cookie
        // Borrarla es realmente sencillo
        Response.Cookies.Remove("subgurim");

        // O si quieres borrarlas todas...
        Response.Cookies.Clear();


5.- Cookies multidimensionales
Sí, ya lo sé, una sóla cookie puede contener varios valores... pero ASP.NET nos lo sigue poniendo muy sencillo. Veamos cómo creamos una cookie multidimensional y cómo la recogemos. Por extensión sabemos ya modificar esa cookie así como borrarla.

5.1 - Crear cookie multidimensional
        HttpCookie addMultiCookie = new HttpCookie("subgurimMultidimensional");
        for (int i = 0; i < 10; i++)
        {
            // Mi modo preferido
            addMultiCookie.Values.Add(i.ToString(), "Elemento " + i.ToString());
            
             // Modo antiguo y que no me gusta
            //addMultiCookie[i.ToString()] = "Elemento " + i.ToString();
        }
        Response.Cookies.Add(addMultiCookie);


Como observamos, la única diferencia es que accedemos a la colección Values (System.Collections.Specialized.NameValueCollection), y en ella podemos ejecutar lo mismo que en cualquier otro tipo de colección.

5.2 Recoger cookie multidimensional
        HttpCookie cogeMultiCookie = Request.Cookies.Get("subgurimMultidimensional");   
        // Accedemos a cualquiera de los valores.
        // Por ejemplo, en este caso recogemos el valor de la cookie cuyo nombre es "5"
        string valorCualquiera = cogeMultiCookie.Values.Get("5");



Nota
: Fijaos en que siempre que recogemos una cookie, utilizamos Request, y cuando la modificamos o borramos, utilizamos Response.
Nota 2: El objeto HttpCookie sólo contiene a la cookie, si queremos darle valor a los cambios que le hagamos, siempre debemos utilizar el Response y el Request.