HowTo: Cookies mit ASP.NET MVC erstellen & entfernen
Cookies 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:
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:
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







Hannes Preishuber
10. June 2009
guter Artikel- aber ganz ehrlich- wo steckt da die Innovation?- ohne MVC ist das viel einfacher
Robert Mühsig
10. June 2009
Da steckt keine Innovation dahinter
Ich mag MVC nur viel mehr als WebForms (bzw. habe es wesentlich besser verstanden).
Wer kein MVC Template installiert hat, kann sich ja den Code oben rauskopieren und in seine Codebehinde setzen, sollte genauso funktionieren.
Andre Loker
10. June 2009
"ohne MVC ist das viel einfacher"
Das würde mich doch jetzt mal interessieren, inwiefern das cookie handling ohne MVC einfacher, bzw gar viel einfacher ist, zumal – wie Robert schon ausführte – das ganze unabhängig von WebForms und MVC funktioniert, und die selbe API bemüht (HttpCookieCollection).
@Robert: guter Artikel
Peter Bucher
19. June 2009
Ich stimme Andre zu, da wird die selbe API benutzt.