template
Der Zweck von Cookies besteht in der Speicherung von Informationen auf dem Client. Sie sind vergleichbar mit der INI-Datei eines Programms.
Ihre Lebensdauer ist per Default auf die Browser-Sitzung beschränkt, kann aber mittels Angabe eines Ablaufdatums auch sessionübergreifend erweitert werden.
Schreib- und Leseoperationen erfolgen über die document.cookie-Eigenschaft. In ihr sind alle Daten in Form von Schlüssel/Wert-Paaren gespeichert. Die Einträge sind jeweils per Semikolon getrennt.
Wie in einer INI-Datei wird auch hier zwischen Schlüssel und Wert ein Gleichheitszeichen (=) notiert.
Schlüssel1=Wert1; Schlüssel2=Wert2; Schlüssel3=Wert3
Beim Schreiben eines Eintrags wird das neue Schlüssel/Wert-Paar automatisch ins Cookie integriert, wobei andere eventuell bereits vorhandene Einträge von dieser Aktion unberührt bleiben:
document.cookie='bg=blue';
Es können auch mehrere Elemente in einem Rutsch eingetragen werden:
document.cookie='bg=blue; fg=white; count=123';
Das Ändern eines Wertes geschieht ebenfalls automatisch, d.h. eine vorherige Löschung des Eintrags ist nicht nötig:
document.cookie='bg=red';
Beim Schreiben/Ändern ist darauf zu achten, dass die Werte kein Komma oder Semikolon enthalten, weil diese Zeichen in der Syntax des Cookies eine strukturelle Bedeutung haben. Sicherheitshalber sollte man kritische Werte daher immer mittels escape() maskieren:
document.cookie='x='+escape('dir=.\\');
Alternativ kann man Werte, die viele Sonderzeichen oder gar binären Inhalt besitzen, als Hexzeichen-String abspeichern.
Hier die benötigten Konvertierungsfunktionen StrToHex() und HexToStr():
function StrToHex(s) { var le=s.length,h='',i,c;
for (i=0;i<le;i++) h+=((c=s.charCodeAt(i))<16?'0':'')+c.toString(16); return h; }
function HexToStr(h) { var le=h.length>>1,s='',i,c;
for (i=0;i<le;i++) s+=String.fromCharCode(parseInt(h.substr(i<<1,2),16)); return s; }
Um einen Wert wieder zu löschen, wird dem Schlüssel einfach ein Leerstring zugewiesen. Dadurch wird der komplette Eintrag aus dem Cookie entfernt:
document.cookie='bg=';
Da das Auslesen der document.cookie-Eigenschaft immer alle Paare liefert, muss der String geparst werden, um den Wert eines gewünschten Schlüssels zu finden. Hierzu sollte man eine geeignete Funktion benutzen, z.B.:
function CooGet(key) {
var c=document.cookie,s=key+'=',val='',p;
if ((p=c.indexOf(s))>-1) {
p+=s.length; var p2=c.indexOf(';',p); if (p2<0) p2=c.length;
val=unescape(c.substring(p,p2));
} return val;
}
Eventuelle beim Schreiben mittels escape() durchgeführte Formatierungen werden durch unescape() rückgängig gemacht.
Um einen Eintrag sessionübergreifend zu machen, muss man ihm ein Ablaufdatum mitgeben. Hierzu wird der Schlüssel expires verwendet; den Datumswert errechnet man mithilfe der Date-Methoden getTime() und setTime(), die Formatierung des Datums erledigt toGMTString().
Im Beispiel wird die Lebensdauer des Eintrags auf 14 Tage gesetzt:
var d = new Date();
d.setTime(d.getTime() + 14*24*3600000); // 14 * 24 Stunden
document.cookie = 'x=123; expires=' + d.toGMTString();
template |
 |