Man merkt der Cookie-Syntax und den Methoden an, dass Cookies eine alte Technik sind (1997!), zwar nicht besonders kompliziert, aber reichlich angestaubt. Es gibt keine Methoden, um ein einzelnes Cookie zu isolieren.
Javascript setzt und untersucht Cookies über das globale document.cookie. Beim Auslesen verhält sich document.cookie wie ein String und gibt eine Semikolon-getrennte Liste aller Cookies des aktuellen Dokuments zurück. Nur eine Suche im Cookie-String bringt einen bestimmten Cookie-Wert zutage.
document.cookie cookiereader=4711; status=allow; buttons=green large top;
Nach einem bestimmten Cookie suchen:
function getCookieValue(a) { const b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)'); return b ? b.pop() : ''; } console.log ("getCookieValue " + getCookieValue("cookiereader"));
Quelle Shortest function for reading a cookie by name in Javascript
Wenn Javascript das erwartete Cookie nicht findet, gibt das Script einen leeren String zurück. Das passiert z.B., wenn der Besucher die Cookies in seinem Browser gelöscht hat.
Cookies dekodieren
Cookies sind oft kodiert, damit sie keine unerlaubten Zeichen enthalten. Sind sie z.B. URI-enkodiert (encodeURIComponent), können sie mit decodeURIComponent dekodiert werden.
var rawValue = getCookieValue("cookiereader"); var decodedValue = decodeURIComponent(rawValue);
Alle Cookies lesen
Früher galt, dass individuelle Cookies durch ein Semikolon gefolgt von einem Leerzeichen getrennt werden. Darauf sollte man sich nicht mehr verlassen. Ebenso darf vor und nach dem Gleichheitszeichen zwischen Cookie-Name und Cookie-Wert ein Leerzeichen sitzen.
Zuerst alle sichtbaren Cookies in ein Hash extrahieren, um das gesuchte Cookie zu untersuchen.
- Die Liste der Cookies aus document.cookie lesen
- Die Liste anhand des Semikolons in einzelne Cookies splitten.
- Jedes Cookie in Name und Wert splitten
- Cookies nach Namen indexieren
- Das gewünschte Cookie herausfiltern und den Wert des Cookies dekodieren
var cookieList = (document.cookie) ? document.cookie.split(';') : []; var cookieValues = {}; for (var i = 0, n = cookieList.length; i != n; ++i) { var cookie = cookieList[i]; var f = cookie.indexOf('='); if (f >= 0) { var cookieName = cookie.substring(0, f); var cookieValue = cookie.substring(f + 1); console.log ("cookieName + " + cookieName + " cookieValue " + cookieValue); if (!cookieValues.hasOwnProperty(cookieName)) { cookieValues[cookieName] = cookieValue; } } }
Cookies löschen
Um ein Cookie zu löschen, setzt man einen Zeitpunkt in der Vergangenheit. Der Browser sieht darin das abgelaufene Cookie und löscht es aus seinen Speicher.
Kompliziert ist allenfalls das Ablaufdatum. Alles beginnt mit dem aktuellen Zeitpunkt – date.getTime():
var date = new Date(); date.setTime (date.getTime() + days * 24 * 60* 60 * 1000); ^ ^ | | | +-- Tage in Millisekunden umsetzen | +--- Tage bis zum Ablaufdatum var expires = date.toGMTString();
Viel einfacher funktioniert das Löschen des Javascript-Cookies mit dem neueren max-age: max-age=0
document.cookie = "theme=twenty; max-age=0; path=/; domain=myhome.me"