So arbeiten Sie mit Cookies in ASP.NET Core

Ein Cookie ist ein Datenelement, das normalerweise zum Speichern von Informationen über den Benutzer verwendet wird und auf dem Computer des Benutzers gespeichert wird. In den meisten Browsern wird jedes Cookie als kleine Datei gespeichert, in Firefox werden sie jedoch alle zusammen in einer einzigen Datei gespeichert. Cookies werden als Schlüssel-Wert-Paare dargestellt, und Sie können die Schlüssel zum Lesen, Schreiben oder Löschen von Cookies verwenden.

ASP.NET Core verwendet Cookies, um den Sitzungsstatus aufrechtzuerhalten. Das Cookie, das die Sitzungs-ID enthält, wird bei jeder Anforderung an den Client gesendet. Dieser Artikel enthält eine Diskussion darüber, wie wir mit Cookies in ASP.NET Core arbeiten können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen.

Erstellen Sie ein ASP.NET Core MVC-Projekt in Visual Studio

Lassen Sie uns zunächst ein ASP.NET Core MVC-Projekt in Visual Studio 2019 erstellen. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core MVC-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.NET Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Aktivieren Sie optional das Kontrollkästchen "Lösung und Projekt im selben Verzeichnis platzieren".
  7. Klicken Sie auf Erstellen.
  8. Wählen Sie im nächsten Fenster "Neue ASP.NET Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 2.2 (oder höher) aus der Dropdown-Liste oben aus.
  9. Wählen Sie als Projektvorlage „Webanwendung (Model-View-Controller)“ aus, um eine neue ASP.NET Core MVC-Anwendung zu erstellen. 
  10. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  11. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch hier keine Authentifizierung verwenden.
  12. Klicken Sie auf Erstellen. 

Sie sollten jetzt ein neues ASP.NET Core MVC-Projekt in Visual Studio haben. Wir werden dieses Projekt in den folgenden Abschnitten dieses Artikels verwenden.

Lesen Sie ein Cookie in ASP.NET Core

Sie können ein Cookie aus der Request.Cookies-Sammlung lesen. Das folgende Codefragment zeigt, wie Sie ein Cookie aus dem Request-Objekt in ASP.NET Core lesen können.

string cookie = Request.Cookies ["Schlüssel"];

Wenn Sie die Ablaufzeit des Cookies angeben möchten, können Sie die überladene Version der Append-Methode verwenden, wie im folgenden Code-Snippet gezeigt.

CookieOptions Option = neue CookieOptions (); 

option.Expires = DateTime.Now.AddMilliseconds (10); 

Response.Cookies.Append (Schlüssel, Wert, Option); 

Mit der CookieOptions-Klasse können Sie beim Erstellen eines Cookies die folgenden zusätzlichen Eigenschaften angeben:

  • Domäne - Wird verwendet, um die einem Cookie zugeordnete Domäne anzugeben
  • Ablaufzeit - wird verwendet, um die Ablaufzeit des Cookies anzugeben
  • Pfad - wird verwendet, um den Cookie-Pfad anzugeben
  • Sicherheitsrichtlinie - Wird verwendet, um anzugeben, ob auf das Cookie über HTTPS zugegriffen werden kann
  • HttpOnly - wird verwendet, um anzugeben, ob das Cookie nur für den Server verfügbar ist

Schreiben Sie ein Cookie in ASP.NET Core

Um ein Cookie zu schreiben, können Sie die Append-Methode für das Request-Objekt verwenden. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

Response.Cookies.Append (somekey, somevalue);

Löschen Sie ein Cookie in ASP.NET Core

Um ein Cookie zu entfernen, können Sie die Löschmethode der Cookies-Auflistung verwenden, die sich auf das Anforderungsobjekt bezieht. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

Response.Cookies.Delete (somekey);

Greifen Sie in ASP.NET Core auf HttpContext zu

In diesem Abschnitt untersuchen wir, wie wir mit Cookie-Daten in ASP.NET Core arbeiten können. Wir müssen auf den HttpContext zugreifen, um auf das Request-Objekt zugreifen zu können. Sie können über die IHttpContextAccessor-Schnittstelle auf den HttpContext in ASP.NET Core zugreifen. Die HttpContextAccessor-Klasse implementiert diese Schnittstelle.

Zuerst sollten Sie IHttpContextAccessor für die Abhängigkeitsinjektion registrieren. Das folgende Codeausschnitt zeigt, wie Sie einen Singleton-Dienst vom Typ HttpContextAccessor in der ConfigureServices-Methode der Startup-Klasse hinzufügen können.

public void ConfigureServices (IServiceCollection-Dienste)

        {

            services.AddSingleton

            HttpContextAccessor> ();

            // Anderer Code

        }}

Sie können die Abhängigkeitsinjektion nutzen, um einen Verweis auf die IHttpContextAccessor-Instanz abzurufen. Dadurch erhalten Sie wiederum einen Verweis auf HttpContext.

Das folgende Codeausschnitt zeigt, wie Sie auf die IHttpContextAccessor-Instanz im Controller zugreifen können. Beachten Sie, dass HomeController standardmäßig erstellt wird, wenn Sie ein neues ASP.NET Core MVC-Projekt in Visual Studio erstellen.

öffentliche Klasse HomeController: Controller

{

  privat schreibgeschützt IHttpContextAccessor _httpContextAccessor;

  öffentlicher HomeController (IHttpContextAccessor httpContextAccessor)

  {

     this._httpContextAccessor = httpContextAccessor;

  }}   

  // Schreiben Sie hier Ihre Aktionsmethoden

}}

Schreiben Sie Cookie-Daten in Ihre ASP.NET Core-Controller-Methode

Mit der folgenden Methode können Sie Cookie-Daten in Ihren Controller schreiben.

public IActionResult Write (Zeichenfolgenschlüssel, Zeichenfolgenwert, bool isPersistent)

  {

       CookieOptions options = new CookieOptions ();

       if (isPersistent)

           options.Expires = DateTime.Now.AddDays (1);

       sonst

           options.Expires = DateTime.Now.AddSeconds (10);

       _httpContextAccessor.HttpContext.Response.Cookies.Append

       (Schlüssel, Wert, Optionen);

       return View ("WriteCookie");

  }}

Lesen Sie Cookie-Daten in Ihrer ASP.NET Core-Controller-Methode

Sobald die Cookie-Daten erfolgreich geschrieben wurden, können Sie die folgende Methode verwenden, um Cookie-Daten in Ihrem Controller zu lesen.

public IActionResult Read (Zeichenfolgenschlüssel)

  {

       ViewBag.Data =

       _httpContextAccessor.HttpContext.Request.Cookies [Schlüssel];

       return View ("ReadCookie");

  }}

Um zu überprüfen, ob ein Cookie richtig geschrieben wurde, können Sie den Cookie-Cache Ihres Webbrowsers überprüfen. In einem zukünftigen Beitrag werden wir untersuchen, wie wir mit der Cookie-basierten Authentifizierung und Autorisierung in ASP.NET Core arbeiten können.