10 June 2009 Robert Muehsig

imageCookies sind ein toller Weg um Daten auf dem Client zu speichern. Das können Anmeldeinformationen sein oder andere Daten, die man auf dem Client abspeichern möchte. Wer das ASP.NET Membership System nutzt wird oftmals auch die "Angemeldet bleiben" Funktionalität benutzen. In diesem HowTo geht es um das pure Erstellen eines Cookies und wie man diesen auch wieder los wird.

Aufbau

Als Demogrundlage nutze ich das ASP.NET MVC Framework. So sieht die Testseite aus wenn ein Cookie gefunden wurde:

image 

Ich habe auch die Zeit mit ausgegeben, wann der Cookie erstellt wurde (ja, ich blogge 3 Uhr morgens ;) ).

Wenn kein Cookie gefunden wird sieht es so aus:

image

Die Ausgabe erfolgt auf der Index.aspx über den HomeController:

public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
            string cookie = "There is no cookie!";
            if(this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("Cookie"))
            {
                cookie = "Yeah - Cookie: " + this.ControllerContext.HttpContext.Request.Cookies["Cookie"].Value;
            }
            ViewData["Cookie"] = cookie;
            return View();
        }

Hier wird festgestellt ob es so ein Cookie gibt und wenn ja wird dieser ausgegeben.

Die beiden Links führen zum CookieController:

public class CookieController : Controller
    {

        public ActionResult Create()
        {
            HttpCookie cookie = new HttpCookie("Cookie");
            cookie.Value = "Hello Cookie! CreatedOn: " + DateTime.Now.ToShortTimeString();

            this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
            return RedirectToAction("Index", "Home");
        }

        public ActionResult Remove()
        {
            if (this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("Cookie"))
            {
                HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["Cookie"];
                cookie.Expires = DateTime.Now.AddDays(-1);
                this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
            }
            return RedirectToAction("Index", "Home");
        }

    }

Die Create Methode erzeugt sehr schlicht ein Cookie und packt diesen in die Response und leitet dann wieder zum Index View um.

Die Remove Methode prüft ebenfalls ob das Cookie da ist und wenn ja, wird dieses gelöscht.

Wichtig beim Cookies löschen:

Diese Variante den Cookie zu löschen schlägt fehl:

this.ControllerContext.HttpContext.Response.Cookies.Clear();

Der Cookie muss (wie im CookieController zu sehen) wieder in die Response zurück und das Ablaufdatum muss gesetzt werden. Ich setze es einfach auf gestern, sodass der Browser das Cookie sofort verwirft.
Da ich da eine kleine Weile rumgeflucht habe, wollte ich es einfach mal niederschreiben  ;)

[ Download Demosource ]


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de