Cookies
Kurzgesagt ist ein Cookie nichts anderes als eine Textdatei (oder mehrere) mit einem Schlüssel und einem Wert sowie anderen optionalen Einstellungen.
Diese können vom Webserver oder Browser mittels JavaScript erzeugt werden und werden bei jeder Abfrage vom Browser an den Webserver mit gesendet (auch bei der Abfrage von Bildern oder anderen Dateitypen).
Nach RFC 6265 darf ein Cookie min. 4096 groß sein und pro Domäne dürfen min. 50 Cookies gespeichert sein.
Einer der Haupteinsatzzwecke ist bspw. die Identifikation eines Benutzers, was durch das Speichern der Session-Id im Cookie gemacht wird (natürlich sehr vereinfacht ausgedrückt).
Im Browser können nur Cookies derselben Domäne ausgelesen werden.
Aufbau
- Name: Name des Cookies. Erlaubt sind alle ASCII-Zeichen exkl. Leerzeichen, Tabs sowie spezielle Zeichen wie Anführungszeichen, Klammern, @, Komma, Semikolon, Slash, Backslash, Fragezeichen, Gleich, …
- Wert: Wert des Cookies. Erlaubt sind alle ASCII-Zeichen exkl. Leerzeichen, Tabs sowie spezielle Zeichen wie Anführungsführungszeichen, Komma, Semikolon und Backslash.
- Expires: Ablaufzeitpunkt (optional)
- Max-Age: Anzahl Sekunden, bis das Cookie abläuft (optional)
- Domain: Wenn angegeben, dann gilt es für die angegebene Domäne sowie alle Subdomänen. Wurde es nicht angegeben, dann wird automatisch die aktuelle Domäne verwendet, ohne Subdomänen. (optional)
- Path: wird ein Pfad angegeben, dann wird das Cookie nur dann mit gesendet, wenn die Abfrage zu diesem Pfad passt bzw. sich darin befindet. Wurde bspw. „/demo“ angegeben, dann wird das Cookie auch bei „/demo/img.jpg“ gesendet, nicht aber bei „/img.jpg“. (optional)
- Secure: Cookies werden nur gesendet, wenn die Abfrage auf HTTPS-Schema gemacht wurde. (optional)
- HttpOnly: Ist Http-Only gesetzt, dann kann JavaScript den Inhalt dieses Cookies nicht auslesen. Es wird aber dennoch bei allen Abfragen an den Server mit gesendet (optional).
- SameSite: Hiermit kann verhindert werden, dass bei Cross-Site-Requests das Cookie mit gesendet wird (indem der Wert auf Strict oder Lax gesetzt wird). (optional)
JavaScript
Zum Auslesen von Cookies in JavaScript ist
document.cookie
der passende Einsprungspunkt. Dies gibt alle Cookies mit Semikolon getrennt zurück.
Das Setzen eines Wertes ist etwas seltsam, aber wird folgendermaßen gemacht:
document.cookie = "TEST1=WERT;";
document.cookie = "TEST2=WERT;";
Obwohl es so aussieht, als ob die zweite Zeile die erste überschreiben würde, wird dies nicht gemacht. Stattdessen wird intern geprüft, ob es bspw. bereits ein Cookie mit dem Namen TEST2 gibt. Wenn nein, wird es erstellt, ansonsten überschrieben.
Um ein Cookie zu löschen, wird einfach dessen Expires entsprechend in die Vergangenheit gesetzt.