This article has been localized into German by the community.
Cookies
HTTP, das Protokoll, das die Kommunikation zwischen einem Server und einem Client im Web übernimmt, wird als zustandsloses Protokoll bezeichnet. Mit anderen Worten, wenn ein Benutzer zwei Seiten auf einem Server anfordert, werden zwischen diesen beiden Anforderungen keine Informationen automatisch geteilt. Stattdessen muss sich ein Entwickler auf so genannte Cookies (oder Sitzungen - dazu später mehr) verlassen, um Informationen zwischen den Anforderungen auszutauschen. Dies ist in vielen Situationen äußerst nützlich, z.B.: um einen Benutzer zwischen mehreren Anfragen usw. eingeloggt zu halten
Nahezu alle serverseitigen Technologien unterstützen den Umgang mit Cookies und natürlich auch das ASP.NET MVC-Framework. Tatsächlich ist der Umgang mit Cookies dank der Funktionen der HttpContext-Klasse ziemlich einfach. In diesem Artikel erfahren Sie, wie Sie ein Cookie setzen und anschließend erneut lesen, damit Sie Informationen über einen bestimmten Besucher zwischen seinen Anfragen austauschen können.
Was ist ein Cookie?
Ein Cookie ist im Grunde eine physische Klartextdatei, die vom Client (normalerweise ein Browser) gespeichert wird und an eine bestimmte Website gebunden ist. Der Client lässt dann zu, dass diese bestimmte Website die in dieser Datei gespeicherten Informationen bei späteren Anforderungen liest, sodass der Server (oder sogar der Client selbst) Informationen zur späteren Verwendung speichern kann.
Cookies setzen und lesen
Das Setzen eines Cookies und das spätere erneute Lesen mit ASP.NET MVC ist sehr, sehr einfach. So können Sie ein Cookie in seiner einfachsten Form an den Client senden:
HttpContext.Response.Cookies.Append("user_id", "1");
Beachten Sie, wie ich die Response -Eigenschaft für die HttpContext -Klasse verwende, über die ich auf die Cookies -Eigenschaft zugreifen kann. Mit der Append() -Methode kann ich der Ausgabe ein Cookie hinzufügen, indem ich einen Namen und einen Wert dafür gebe. Der Name (user_id) wird später verwendet, um den Wert (1) zurückzugewinnen. Genauso einfach ist es, den tatsächlichen Wert zurückzugewinnen:
var userId = HttpContext.Request.Cookies["user_id"];
Beachten Sie, dass ich jetzt beim Zurücklesen des Werts die Request -Eigenschaft anstelle der Response verwende. Der Grund dafür ist, dass ein Cookie gesetzt wird, indem der Antwort die an den Client gesendet wird, Informationen hinzugefügt werden. Dies bedeutet, dass Sie Informationen aus der Anfrage des Clients abrufen (ein normaler Browser sendet bei jeder Anfrage automatisch alle relevanten Cookies).
Nachdem Sie nun wissen, wie Sie Cookie-Informationen schreiben und lesen, können Sie dies zu einem sehr einfachen Beispiel zusammenfassen, in dem wir eine Information als Cookie hinzufügen, sofern sie noch nicht vorhanden ist. Dies ist eine hervorragende Möglichkeit, um festzustellen, ob ein Benutzer der anwesend ist die Seite schon einmal besucht hat oder nicht:
public class CookiesController : Controller
{
public IActionResult Index()
{
if(!HttpContext.Request.Cookies.ContainsKey("first_request"))
{
HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString());
return Content("Welcome, new visitor!");
}
else
{
DateTime firstRequest = DateTime.Parse(HttpContext.Request.Cookies["first_request"]);
return Content("Welcome back, user! You first visited us on: " + firstRequest.ToString());
}
}
}
Unsere Controller-Aktion generiert nun eine Antwort basierend darauf, ob der Besucher die Seite zuvor besucht hat, indem immer geprüft wird, ob ein Cookie mit dem Namen "first_request" vorhanden ist. Wenn dieses Cookie nicht vorhanden ist, fügen wir es hinzu und setzen den Wert auf das aktuelle Datum und die Uhrzeit. Wenn das Cookie vorhanden ist, können wir davon ausgehen, dass der Besucher die Seite zuvor besucht hat, und wir können dem Besucher sogar mitteilen, wann der erste Besuch stattgefunden hat.
Das sind also grundlegende Cookies auf den Punkt gebracht, und jetzt wissen Sie, wie man sie schreibt und liest. Sie müssen jedoch noch ein bisschen mehr wissen, wenn Sie die Vorteile von Cookies voll ausschöpfen möchten.
Cookie Optionen
Als optionalen dritten Parameter für die soeben verwendete Append() -Methode können Sie eine Instanz der CookieOptions -Klasse übergeben. Hiermit können Sie mehrere wichtige Aspekte Ihres Cookies anpassen, z.B.: wie lange es am Leben bleiben soll und was Domain(s) und Pfad betrifft. Lassen Sie mich die wichtigsten Eigenschaften durchgehen. Stellen Sie jedoch zunächst sicher, dass Sie den Namespace Microsoft.AspNetCore.Http eingefügt haben, in dem sich die CookieOptions-Klasse befindet:
using Microsoft.AspNetCore.Http;
Jetzt können Sie eine Instanz der CookieOptions-Klasse erstellen, die die Standardeinstellungen verwendet, und diese dann an die Append() -Methode übergeben:
CookieOptions cookieOptions = new CookieOptions();
HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString(), cookieOptions);
Bevor Sie es jedoch übergeben (also zwischen den beiden Codezeilen), möchten Sie wahrscheinlich einige der Optionen ändern. Hier sind die relevantesten:
CookieOptions.Expires
Standardmäßig handelt es sich bei Ihrem Cookie um ein sogenanntes Sitzungscookie. Dies bedeutet, dass es nur so lange gültig ist, wie der Browser geöffnet bleibt. Sobald der Browser geschlossen wird, wird der Cookie vom Browser gelöscht. Sie können dieses Verhalten jedoch mithilfe der Eigenschaft Expires ändern. Diese Eigenschaft ist eine DateTimeOffset-Instanz, mit der Sie auf einfache Weise eine Ablaufzeit wie folgt konfigurieren können:
cookieOptions.Expires = new DateTimeOffset(DateTime.Now.AddDays(7));
Dadurch läuft der Cookie in 7 Tagen ab. Sie können dies natürlich mit den Methoden wie AddDays(), AddHours() usw. anpassen.
CookieOptions.Domain
Standardmäßig wird das Cookie für die Domain gesetzt, die die Anfrage gestellt hat. Wenn also die Domain mywebsite.com auf Ihre Seite zugreift, wird das Cookie für mywebsite.com gesetzt. Wenn auf Ihre Seite über eine Unterdomäne zugegriffen wird, wird diese Unterdomäne verwendet. Dies ist wichtig, da eine Unterdomäne "www" sein kann. Wenn also www.mywebsite.com auf Ihre Seite zugreift, ist das Cookie standardmäßig nur über zugänglich www.mywebsite.com und NICHT mywebsite.com. Daher kann es eine gute Idee sein, die Domain-Eigenschaft auf die Basisdomain Ihrer Website zu setzen, der ein Punkt vorangestellt ist:
cookieOptions.Domain = ".mywebsite.com";
Jetzt können Sie auf Ihr Cookie von mywebsite.com sowie auf alle möglichen Unterdomänen zugreifen. Wenn Sie jedoch nicht die volle Kontrolle über die Domain haben, können Sie die Domain des Cookies auf die spezifische (Sub-) Domain beschränken, die Sie kontrollieren.
CookieOptions.Path
Standardmäßig wird der Pfad des Cookies auf "/" gesetzt, was im Grunde bedeutet, dass das Cookie für alle Seiten der Website gültig ist. Unter bestimmten Umständen benötigen Sie jedoch möglicherweise ein Cookie, das nur für eine bestimmte Seite oder einen bestimmten Ordner gültig ist. Dies ist mit der Path-Eigenschaft einfach zu bewerkstelligen:
cookieOptions.Path = "/users/";
Mit dieser Option ist das Cookie jetzt nur für Seiten im Ordner "users" sowie für Unterordner sichtbar und lesbar.
Weitere Eigenschaften von CookieOptions
Es gibt mehrere andere interessante Eigenschaften, die auf CookieOptions zu finden sind, wie IsEssential, HttpOnly und Secure. Wenn Sie mehr darüber erfahren möchten, empfehlen wir Ihnen einen Blick auf die Dokumentation für CookieOptions.
Zusammenfassung
Dank Cookies können Sie Informationen über den Besucher speichern und bei späteren Anfragen wieder abrufen. Dies ist eine sehr wichtige Technik, die in einer Vielzahl von Situationen zum Einsatz kommt, z.B.. das Anmelden des Benutzers, das Nachverfolgen der Nutzung Ihrer Website und vieles mehr.