JavaScript und Cookies
Dieser Artikel erklärt JavaScript und Cookies.
Wir werden alles Schritt für Schritt sorgfältig erklären, von den Grundlagen der Cookies, dem Lesen und Schreiben, der Sicherheit bis hin zu praktischen Beispielen.
YouTube Video
javascript-cookie.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 1em;
14 padding-bottom: 10em;
15 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16 background-color: #f7f9fc;
17 color: #333;
18 line-height: 1.6;
19 }
20
21 .container {
22 max-width: 800px;
23 margin: 0 auto;
24 padding: 1em;
25 background-color: #ffffff;
26 border: 1px solid #ccc;
27 border-radius: 10px;
28 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
29 }
30
31 .container-flex {
32 display: flex;
33 flex-wrap: wrap;
34 gap: 2em;
35 max-width: 1000px;
36 margin: 0 auto;
37 padding: 1em;
38 background-color: #ffffff;
39 border: 1px solid #ccc;
40 border-radius: 10px;
41 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
42 }
43
44 .left-column, .right-column {
45 flex: 1 1 200px;
46 min-width: 200px;
47 }
48
49 h1, h2 {
50 font-size: 1.2rem;
51 color: #007bff;
52 margin-top: 0.5em;
53 margin-bottom: 0.5em;
54 border-left: 5px solid #007bff;
55 padding-left: 0.6em;
56 background-color: #e9f2ff;
57 }
58
59 button {
60 display: block;
61 margin: 1em auto;
62 padding: 0.75em 1.5em;
63 font-size: 1rem;
64 background-color: #007bff;
65 color: white;
66 border: none;
67 border-radius: 6px;
68 cursor: pointer;
69 transition: background-color 0.3s ease;
70 }
71
72 button:hover {
73 background-color: #0056b3;
74 }
75
76 #output {
77 margin-top: 1em;
78 background-color: #1e1e1e;
79 color: #0f0;
80 padding: 1em;
81 border-radius: 8px;
82 min-height: 200px;
83 font-family: Consolas, monospace;
84 font-size: 0.95rem;
85 overflow-y: auto;
86 white-space: pre-wrap;
87 }
88
89 .highlight {
90 outline: 3px solid #ffc107; /* yellow border */
91 background-color: #fff8e1; /* soft yellow background */
92 transition: background-color 0.3s ease, outline 0.3s ease;
93 }
94
95 .active {
96 background-color: #28a745; /* green background */
97 color: #fff;
98 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
99 transition: background-color 0.3s ease, box-shadow 0.3s ease;
100 }
101 </style>
102</head>
103<body>
104 <div class="container">
105 <h1>JavaScript Console</h1>
106 <button id="executeBtn">Execute</button>
107 <div id="output"></div>
108 </div>
109
110 <script>
111 // Override console.log to display messages in the #output element
112 (function () {
113 // Override console.log
114 const originalLog = console.log;
115 console.log = function (...args) {
116 originalLog.apply(console, args);
117 const message = document.createElement('div');
118 message.textContent = args.map(String).join(' ');
119 output.appendChild(message);
120 };
121
122 // Override console.error
123 const originalError = console.error;
124 console.error = function (...args) {
125 originalError.apply(console, args);
126 const message = document.createElement('div');
127 message.textContent = args.map(String).join(' ');
128 message.style.color = 'red'; // Color error messages red
129 output.appendChild(message);
130 };
131 })();
132
133 document.getElementById('executeBtn').addEventListener('click', () => {
134 // Prevent multiple loads
135 if (document.getElementById('externalScript')) return;
136
137 const script = document.createElement('script');
138 script.src = 'javascript-cookie.js';
139 script.id = 'externalScript';
140 //script.onload = () => console.log('javascript-cookie.js loaded and executed.');
141 //script.onerror = () => console.log('Failed to load javascript-cookie.js.');
142 document.body.appendChild(script);
143 });
144 </script>
145</body>
146</html>
JavaScript und Cookies
Cookie
bezeichnet kleine Datenmengen, die im Browser des Nutzers gespeichert werden. Sie werden hauptsächlich für folgende Zwecke verwendet:.
- Benutzerauthentifizierung (Beibehaltung des Login-Status)
- Speichern von Benutzereinstellungen (Sprache, Thema usw.)
- Tracking (Browserverlauf usw.)
In JavaScript können Sie Cookies mit document.cookie
lesen und schreiben.
Erstellen (Schreiben) von Cookies
Cookies werden mit folgender Syntax erstellt:.
1document.cookie = "username=JohnDoe";
- Dieser Code speichert ein Cookie mit dem Namen
"username=JohnDoe"
im Browser.
Erstellen von Cookies mit einem Ablaufdatum
Cookies können mit einem Ablaufdatum versehen werden. Wenn kein Ablaufdatum festgelegt ist, wird es als Session-Cookie behandelt und beim Schließen des Browsers gelöscht.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3const cookieText = "username=JohnDoe; expires=" + date.toUTCString() + "; path=/; SameSite=None; Secure"
4document.cookie = cookieText;
5console.log(`Cookie Text : ${cookieText}`);
6console.log(`Cookie Value : ${document.cookie}`);
- Das Attribut
expires
gibt das Ablaufdatum des Cookies im UTC-Format an. - Das Attribut
path
gibt den Pfad an, für den das Cookie gesendet wird./
bedeutet die gesamte Website. - Wenn Sie
SameSite=None
angeben, wird dasCookie
auch bei Cross-Site-Anfragen gesendet. In diesem Fall müssen Sie jedoch immer das AttributSecure
angeben. - Durch Angabe von
Secure
wird dasCookie
nur bei HTTPS-Kommunikation übertragen, was die Sicherheit erhöht. - Durch Zugriff auf
document.cookie
können Sie alle auf der aktuellen Seite verfügbarenCookies
als Zeichenkette abrufen. - Mit
console.log
können Sie den Unterschied zwischen den tatsächlich im Browser gesetztenCookie
-Werten und den abrufbaren Werten überprüfen.
Auslesen (Lesen) von Cookies
Mit document.cookie
können Sie alle Cookies als Zeichenkette abrufen.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3document.cookie = "theme=dark; expires=" + date.toUTCString() + "; path=/; SameSite=None; Secure"
4
5console.log(document.cookie);
6// Output: "username=JohnDoe; theme=dark"
- Der Rückgabewert von
document.cookie
ist eine einzelne Zeichenkette, in der alleCookies
im Format 'key=value;
' zusammengefügt sind. - Es ist praktisch, eine Funktion zu verwenden, um diese Zeichenkette zu parsen und den gewünschten Wert zu extrahieren.
Funktion zum Abrufen des Werts eines Cookies
1function getCookie(name) {
2 const cookies = document.cookie.split('; ');
3 for (const cookie of cookies) {
4 const [key, value] = cookie.split('=');
5 if (key === name) {
6 return decodeURIComponent(value);
7 }
8 }
9 return null;
10}
11
12console.log(getCookie("username")); // "JohnDoe"
- Diese Funktion trennt Schlüssel und Werte mittels
split()
und gibt den Wert zurück, wenn er dem angegebenen Schlüssel entspricht. - Mit
decodeURIComponent
können Sie kodierte Zeichen korrekt auslesen. - Wenn der entsprechende Schlüssel nicht existiert, wird
null
zurückgegeben.
Löschen von Cookies
Ein Cookie kann gelöscht werden, indem das Ablaufdatum auf ein Datum in der Vergangenheit gesetzt wird.
1document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; SameSite=None; Secure";
2
3console.log(document.cookie);
4// Output: "theme=dark"
- Indem Sie
username
einen leeren Wert zuweisen und das Ablaufdatum in die Vergangenheit setzen, wird es gelöscht. - Beim Löschen eines
Cookie
müssen die Attributepath
,SameSite
undSecure
mit denen übereinstimmen, die beim Erstellen verwendet wurden. - In diesem Beispiel wird
username
gelöscht, andereCookies
wietheme=dark
bleiben erhalten.
Cookie-Optionen
Sie können verschiedene Optionen angeben, um das Verhalten eines Cookies zu steuern. Die wichtigsten sind wie folgt:.
Gibt das Ablaufdatum des Cookies im UTC-Format an. Wenn nicht angegeben, wird das Cookie zu einem Session-Cookie und beim Schließen des Browsers gelöscht.
Gibt das Ablaufdatum des Cookies in Sekunden an. Dies hat Vorrang vor `expires`.
Gibt den Pfad an, für den das Cookie gesendet wird. Wenn Sie beispielsweise `/admin` angeben, wird das Cookie nur an Seiten unter diesem Pfad gesendet.
Gibt die Domain an, für die das Cookie gültig ist. Normalerweise wird die aktuelle Domain verwendet, aber Sie können es auch auf alle Subdomains anwenden, z. B. `.example.com`.
Wenn dieses Attribut gesetzt ist, wird das Cookie nur über HTTPS übertragen. Für erhöhte Sicherheit sollten Sie dieses Attribut bei sensiblen Informationen immer setzen.
Steuert, ob Cookies bei Cross-Site-Requests gesendet werden. Sie können einen der folgenden drei Werte angeben:.
- `Strict`
Cookies werden nur für Anfragen von derselben Website gesendet.
- `Lax`
Cookies werden für reguläre Navigation gesendet, jedoch mit einigen Einschränkungen.
- `None`
Cookies können auch bei Cross-Site-Requests gesendet werden. Dabei ist jedoch auch das Attribut `Secure` erforderlich.
Beispiel: Sicheres Cookie
1document.cookie = "sessionId=abc123; secure; SameSite=Strict";
- Wenn Sie
secure
angeben, wird dasCookie
nur über HTTPS-Kommunikation gesendet. - Wenn Sie
SameSite=Strict
angeben, wird dasCookie
nicht bei Cross-Site-Anfragen gesendet, was als CSRF-Gegenmaßnahme wirksam ist. - Solche sicheren Attribute sind für wichtige
Cookies
, die zur Authentifizierung oder Sitzungsverwaltung verwendet werden, unerlässlich.
Kodierung und Dekodierung
Da Cookie-Werte Sonderzeichen enthalten können, ist es sicherer, encodeURIComponent
zu verwenden.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3
4const username = "JohnDoe";
5document.cookie =
6 "username=" + encodeURIComponent(username) +
7 "; max-age=604800; path=/; SameSite=None; Secure";
8
9console.log(decodeURIComponent(getCookie("username"))); // "JohnDoe"
- Mit
encodeURIComponent
können Sie Leerzeichen, Symbole usw. sicher in einemCookie
speichern. - Beim Auslesen verwenden Sie
decodeURIComponent
, um die ursprüngliche Zeichenkette wiederherzustellen. - In diesem Beispiel wird mit
max-age=604800
die Ablaufzeit auf 7 Tage (604.800 Sekunden) festgelegt. Dies ist eine Methode zur Festlegung des Ablaufdatums, ähnlich wie beiexpires
.max-age
kann in Sekunden angegeben werden und ist oft einfacher zu verwenden.
Praktisches Beispiel: Speichern und Laden eines Themes
Das folgende Beispiel zeigt, wie das vom Benutzer gewählte Theme in einem Cookie gespeichert und beim nächsten Besuch automatisch angewendet wird.
1function setTheme(theme) {
2 document.cookie =
3 "theme=" + encodeURIComponent(theme) +
4 "; max-age=604800; path=/; SameSite=None; Secure"; // 1 week
5 applyTheme(theme);
6}
7
8function applyTheme(theme) {
9 document.body.style.backgroundColor = theme === "dark" ? "#333" : "#fff";
10 document.body.style.color = theme === "dark" ? "#fff" : "#000";
11}
12
13function getCookie(name) {
14 const cookies = document.cookie.split('; ');
15 for (const cookie of cookies) {
16 const [key, value] = cookie.split('=');
17 if (key === name) {
18 return decodeURIComponent(value);
19 }
20 }
21 return null;
22}
23
24const savedTheme = getCookie("theme");
25if (savedTheme) {
26 applyTheme(savedTheme);
27}
1<button onclick="setTheme('light')">Light</button>
2<button onclick="setTheme('dark')">Dark</button>
- Die Funktion
setTheme
speichert das ausgewählte Theme in einemCookie
und ruft anschließend sofortapplyTheme
auf, um den Bildschirm zu aktualisieren. - Die Funktion
applyTheme
ändert die Hintergrund- und Textfarben desbody
entsprechend dem Theme. - Da in diesem Beispiel
max-age=604800
gesetzt ist, bleibt die Theme-Einstellung eine Woche lang erhalten. - Da die Auswahl des Nutzers beim erneuten Besuch der Seite erhalten bleibt, wird die Nutzererfahrung verbessert.
Cookie-Beschränkungen und Hinweise
Beachten Sie beim Verwenden von Cookies folgende Punkte:.
-
Größenbeschränkungen Die Größe eines einzelnen Cookies ist auf etwa 4 KB begrenzt.
-
Begrenzung der Anzahl speicherbarer Cookies Je nach Browser können Sie circa 20 bis 50 Einträge pro Domain speichern.
-
Sicherheitsvorkehrungen Der Inhalt von
Cookies
wird grundsätzlich im Klartext gespeichert, daher sind sie nicht zur Speicherung vertraulicher Informationen wie Passwörtern geeignet. -
Cookies, die von JavaScript nicht zugänglich sind
Cookies
mit dem AttributHttpOnly
können aus Sicherheitsgründen nicht von JavaScript gelesen werden.
Server und Cookies
1Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
Einige Cookie
-Attribute, wie HttpOnly
, können nicht über JavaScript gesetzt werden. Diese müssen serverseitig gesetzt werden.
Zusammenfassung
Das Bearbeiten von Cookies
mit JavaScript kann die Benutzererfahrung verbessern und den Zustand aufrechterhalten. Beachten Sie jedoch die folgenden Punkte, um sie sicher und angemessen zu handhaben.
-
Speichern Sie nur die unbedingt notwendigen Informationen Aus Datenschutz- und Sicherheitsgründen sollten persönliche oder sensible Daten nicht gespeichert und nur unbedingt notwendige Informationen erfasst werden.
-
Sicherheitsattribute richtig einstellen Setzen Sie Attribute wie
Secure
undSameSite
, um Cross-Site-Attacken wie XSS und CSRF zu verhindern. -
Kodierung und Dekodierung von Daten Verwenden Sie
encodeURIComponent
unddecodeURIComponent
, umCookie
-Werte sicher zu speichern und auszulesen, damit Sonderzeichen und japanische Zeichen korrekt verarbeitet werden können.
Wenn Sie die richtige Verwendung von Cookies
erlernen, können Sie fortschrittlichere und sicherere Webanwendungen entwickeln.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.