Cookie

Javascript & Browser-Kekse

Jede Webseite kann mit Javascript einige Daten bei ihrem Browser hinterlegen. Mit Hilfe dieser Cookie-Daten ist es möglich, sie auf anderen Webseiten eindeutig wieder zu erkennen. Cookies werden z.B. als Sicherheits-Komponente eingesetzt, oder zu Marketing-Maßnahmen.
Javascript ECMAScript für HTML und XML
Live Cookie Cookie selbst setzen und lesen
Cookie Übersicht, Informationen
Browser Die Cookie-Optionen gängiger Browser
Cookie setzen Programmierung mit Javascript
Cookie lesen Programmierung mit Javascript
Verwandte Themen PHP Session-Variable, PHP-Array $_COOKIE

Live Cookies

Ein Cookie ist ein kurzer Text, den der Browser auf ihrem PC schreiben und danach lesen darf:

Live Cookie setzen:

Name
Wert
Ablauf (min)

Live Cookies lesen:


 
Tragen sie die gewünschten Cookie-Daten in die Formular-Felder ein und klicken sie 'Cookie setzen'.

Wenn sie ein Feld leer lassen oder unzulässige Daten eingeben, dann werden vorprogrammierte Standard-Werte verwendet.
Wenn sie mehrere Cookies mit den gleichen Namen setzen, dann wird das alte Cookie durch das neue ersetzt.
Wenn sie verschiedene Namen verwenden, dann wird jedesmal ein neues Cookie gesetzt.
Wählen sie kurze Ablauf-Zeiten, um das Löschen eines Cookies zu verfolgen.
Nach dem Setzen eines Cookies wird automatisch die Funktion 'Cookies lesen' (rechts oben) ausgelöst.
Mit Klick auf 'Cookies lesen' werden alle verfügbaren Cookies angezeigt.

Von allen Cookies ihres Browsers sind nur diejenigen zugänglich, welche von einer Webseite dieser Domain (topsoft.at) gesetzt wurden.
Darüber hinaus kann ihr ↓ Browser viele andere Cookies aus anderen Webs verwalten. Diese sind jedoch nur für Webseiten desjenigen Servers zugänglich, der sie vorher gesetzt hat..
Es besteht kein Zugang zu irgendwelchen anderen Daten ihres PC.
Ein Cookie wird entweder nach seiner Ablaufzeit gelöscht, oder automatisch durch den ↓ Browser, oder manuell.

Cookie

Jede Webseite kann mit einem kleinen ↓ Javascript-Programm ein Daten-Cookie bei ihrem Browser hinterlassen, wenn das vom ↓ Browser erlaubt wird.

Jede Webseite aus dem gleichen Web (Domain) kann das Cookie lesen und ihr Verhalten oder ihre Gestaltung danach richten. Für einfache Webseiten ist dies die einzige Möglichkeit, eine/n BesucherIn eindeutig wieder-zu-erkennen.

Es ist für eine Webseite nicht möglich, Cookies anderer Browser zu lesen, oder Cookies, die von anderen Webs (Domänen) hinterlassen wurden.
Jedes Cookie speichert zusätzlich zu seinem Text auch seine Herkunft und seine Ablaufzeit.

Es ist nicht möglich, mit einem Cookie irgendwelche andere (private) Daten vom PC zu lesen.

Es ist unmöglich, Viren oder andere schädliche Software mit einem Cookie zu transportieren.

Cookies sind ungefährlich und bei richtiger Anwendung durchaus sinnvoll, allerdings auch nicht unentbehrlich.

Sicherheit

Ein Cookie sichert die Wieder-Erkennung einer/s bestimmten BesucherIn über mehrere Webseiten hinweg. Für einfache Webseiten gibt es keine andere Möglichkeit, um erhaltene oder erhobene Daten an andere Seiten weiterzugeben. Die sinnvolle Verwendung von Cookies dient daher der Sicherheit der AnwenderInnen.

Dies gilt insbesondere für sog. Session-Cookies, d.h. solche Cookies, die nur während einer Session (=Besuch eines Webs = einer Domain) verwendet und anschließend gelöscht werden.

Zusätzlich und unabhängig davon gibt es weitere Methoden zur Verbesserung der Sicherheit - z.B. gegen das Abhören oder Manipulieren von Daten fremder BesucherInnen.

Marketing

Die Wieder-Erkennung einer/s BesucherIn über längere Zeiten hinweg kann man zur Anpassung des Web-Angebots an bestimmte Personen verwenden.

Wenn man eine/n BesucherIn mit Hilfe eines Cookies erkennt, dann kann man eine oder mehrere Webseiten dynamisch anpassen: Programme (z.B. in Perl oder PHP, sogar in Javascript) kann man z.B. dazu verwenden, einen raschen Weg zu den persönlich bevorzugten Themen zu finden, oder ein bestimmtes Layout zu verwenden.

Javascript

Die Javascript-Eigenschaft cookieEnabled des Objekts navigator gibt Auskunft, ob der verwendete Browser Cookies zulässt.
Live-Daten ihres Browsers:
navigator.cookieEnabled = ?

PHP

Nicht nur Javascript kann Cookies setzen und lesen. Dynamische Webseiten werden oft mit der Programmiersprache → PHP erstellt. PHP kann über die Dauer einer Session (Besuch mehrerer Seiten des gleichen Servers) Daten im Array $_SESSION speichern. Diese Daten werden am Server verwaltet und sind daher gut gegen unbefugten Zugriff geschützt.

Der Server vergibt an jede/n BesucherIn (Client) einen Schlüssel (Session-ID), welcher von diesem in einem Cookie gespeichert wird.
Der Browser muss sich für jede dynamische Webseite dieses Servers mit seinem Cookie ausweisen. Das Cookie wird mit dem Ende einer Session wieder gelöscht. Ein derartiges Cookie sieht typisch so aus:
PHPSESSID=g7e3cdb09lz8z5ch9bzhv414qtee4akb

Nach diesem Prinzip arbeiten fast alle Web-Programme, die individuelle BesucherInnen unterscheiden m¨ssen z.B. WebShops, interne Verwaltung (GroupWare, Buchhaltung, Warenwirtschaft, ...).
Andere Programme (z.B. Content-Management, Wiki, ...) bieten anonymen Zugang ohne Ausweis, verwenden jedoch für einen qualifizierten Zugang ebenfalls $_SESSION-Variable und Cookies.

Apache

Der meist-verwendete Webserver → Apache bietet mit dem Modul usertrack die Möglichkeit, das Surf-Verhaltren der BesucherInnen zu verfolgen.

Zu diesem Zweck wird ein verschlüsseltes Cookie (meist mit dem Namen Apache ) gesetzt. Der Wert des Cookies kann im Access-Log des Webservers gespeichert werden.

Auf diese Weise kann man den Verlauf eines Web-Besuchs verfolgen: Anzahl und Reihenfolge der besuchten Seiten, sowie die jeweilige Aufenthalts-Zeit. Bei Auswertung der Daten erfährt man viel über das eigene Web, z.B. Beliebtheit der einzelnen Seiten, typische Wege dorthin, usw.

Diese Daten lassen sich kaum zu Spionage-Zwecken verwenden, wie oft befürchtet wird. Sie sind jedoch gut zur Verbesserung des Webs geignet, z.B. seiner Ergonomie, Organisation, ...
Eine Ausnahme sind allerdings Webs mit illegalem Inhalt: In diesem Fall kann man die Log-Daten u.a. zur Erpressung der Besucher verwenden.

Cookie-Optionen gängiger Browser

Firefox Browser

Die Informationen und Empfehlungen sind unverbindlich und nur sinngemäß zu verstehen, da sich Menü, Texte und Optionen je nach Version ändern können.

Das Menü Extras | Einstellungen | Datenschutz bietet alle erwarteten Optionen:
Cookies akzeptieren: Damit kann man Cookies generell erlauben oder verbieten. Empfehlung: Ja
Cookies von Dritten akzeptieren: Es gibt Webseiten, in denen Teile fremder Webseiten eingebettet sind. Seriöse Anbieter haben das nicht nötig. Empfehlung: Nein

Cookies behalten - bis (Ablauf, Session-Ende). Generell ist es empfehlenswert, alle Cookies mit dem Ende der Session zu löschen. Ausnahmen sind für solche Webs sinnvoll, wo man als KundIn wieder-erkannt werden möchte.
Cookie-Ausnahmen. Hier kann man das Cookie-Verhalten für einzelne Webs individuell einstellen, d.h. immer zulassen oder blockieren.
Cookies anzeigen: Hier kann man alle aktuell gespeicherten Cookies ansehen oder löschen.

MS Internet Explorer

Auch diese unverbindlichen Angaben und Empfehlungen ändern sich je nach Version !
Wie fast alle Produkte dieses Herstellers neigt auch der M$IE Browser zur Entmündigung der AnwenderInnen. Man soll auf die Weisheit des Herstellers vertrauen, möglichst wenige Einstellungen ändern und man bekommt normalerweise keine der gespeicherten Daten zu sehen...

Das Menü Extras | Internetoptionen | Datenschutz | Erweitert bietet leider nur einige der erwarteten Optionen:
Automatische Cookiebehandlung aufheben: Nach dem Anklicken kann man zumindest einige Optionen einstellen.
Cookies von Erstanbietern kann man annehmen (Empfehlung).
Cookies von Drittanbietern kann man annehmen, besser jedoch blocken (Empfehlung).
Sitzungs-Cookies (für die Dauer der Session) kann man immer zulassen (Empfehlung).
Mit Klick auf den Button 'Sites' kann man die Cookies ausgewählter Webs unabhängig von den Standard-Einstellungen immer zulassen oder blockieren.

Die Cookie-Daten werden gut versteckt:
Die tatsächlich gespeicherten Cookies kann man im Browser weder ansehen noch manuell löschen. Der Hersteller ist offenbar der Meinung, die geistigen Fähigkeiten der AnwnderInnen damit zu überfordern...
Man findet die Cookies im Verzeichnis 'Temporäre Internetdateien', wobei der Datei-Name mit javascript und die Internetadresse mit Cookie: beginnt.
Immerhin darf man diese Cookie-Dateien mit einem Text-Editor öffnen. Die ersten Zeilen enthalten Cookie-Name, Daten und die erzeugende Webseite, danach folgen einige intern verwendete Zahlen-Codes.
Man kann zwar die gefundenen Cookies manuell löschen, das ist jedoch wegen des Aufwands unrealistisch.
Tipp: Besser einen modernen Browser verwenden...

Opera

Auch diese unverbindlichen Angaben und Empfehlungen ändern sich je nach Version !

Das Menü Extras | Einstellungen | Erweitert | Cookies bietet alle erwarteten Optionen:
Man kann alle Cookies annehmen, nur von der besuchten Site annehmen (Empfehlung) oder niemals Cookies annehmen.
Man kann neue Cookies beim Beenden von Opera löschen (Empfehlung) oder behalten (Option nicht ankreuzen).

Mit Klick auf Cookies verwalten erhält man eine Liste aller gespeicherten Cookies, sortiert nach Domain (Site, Web).
Wenn man ein Cookie auswählt, erhält man mit Bearbeiten eine vorbildliche Übersicht der gespeicherten Daten. Man kann die Daten sogar manuell ändern - davon wird jedoch abgeraten.
Mit dem Button Löschen kann man einzelne oder alle Cookies eines Webs (einer Site) selektiv löschen.

Cookie setzen

Das Beispiel rechts zeigt eine vereinfachte Funktion zum Setzen eines Cookies.
Der Cookie-Text wird in der Variablen ctxt schrittweise zusammengestellt.
Der Cookie-Name wird mit 'MeinKeks' festgelegt.
Die Daten werden im Argument cdat als Text an die Funktion übergeben und mit Funktion ecsape codiert.
Die Ablaufzeit in Minuten wird im Argument cmin an die Funktion übergeben. Die Variable datim wird auf die aktuelle Zeit gesetzt. In der Variablen cx wird diese Zeit in einen → Timestamp (in ms) umgewandelt und danach die Ablaufzeit (in ms umgewandelt) addiert. Es wird ausschließlich Weltzeit (→ UTC) verwendet.
Die Variable datim wird danach auf den in cx berechneten Zeitpunkt gesetzt. Zuletzt wird der Ablauf-Zeitpunkt mit Funktion toGMTString in lesbaren Text umgewandelt und an den Cookie-Text angefügt.
Der in der Variablen ctxt zusammengestellte Cookie-Text wird als neues Cookie gespeichert.
Javascript-Funktion zum Setzen eines Cookies:
function set_my_cookie(cdat,cmin) {
var ctxt = "MeinKeks=";
ctxt += escape(cdat)+";";
var datim = new Date();
var cx = datim.getTime()+(cmin*60*1000);
datim.setTime(cx);
ctxt += " expires=";
ctxt += datim.toGMTString();
document.cookie = ctxt;
}

Anwendung mit Javascript:
set_my_cookie('Hallo !',10);
stellt ein Cookie MeinKeks=Hallo ! mit einer Ablaufzeit von 10 Minuten her.

Codierung

Die Syntax ('Grammatik') eines Cookies ist einfach:
CookieName=CookieDaten

Der gesamte Text besteht aus Name und Wert (Daten), getrennt durch ein = Zeichen.
Beide Teile können beliebige Zeichen enthalten, insbesondere auch Leerzeichen, = Zeichen, Umlaute und andere Sonderzeichen. Sie werden daher in codierter Form gespeichert.
Dazu werden die Javascript-Funktionen escape(), unescape() verwendet. Die codierten Texte enthalten keine Leer- oder Sonderzeichen und lassen sich auf diese Weise unabhängig von System, Browser und Sprache speichern und lesen.
Nach Cookie-Name und -Wert können weitere Cookie-Variable folgen. Sie werden mit ; voneinander getrennt.

Die meisten Browser erlauben auch das Setzen unsauberer (nicht codierter) Cookies. Die Folgen sind nicht vorhersehbar: Es ist möglich, dass auch diese Cookies funktionieren, aber auch, dass sie (je nach System, Browser, Version) vom Browser ignoriert werden, oder Fehler ergeben.

Details zur Codierung von Zeichen

Ablaufzeit

Die Herstellung des Textes für die Ablaufzeit ist vergleichsweise kompliziert.
Der Ablauf-Zeitpunkt wird als Text in genau jener Form erwartet, wie von der Funktion toGMTString() erzeugt. Nur in dieser Form ist garantiert, dass der Browser den Text richtig versteht und das Cookie zum gewünschten Zeitpunkt löscht.
Unabhängig davon kann ein Browser je nach Einstellung jedes Cookie schon vorher löschen, und darüber hinaus kann das Cookie jederzeit manuell gelöscht werden.
Die Zeit wird als → Weltzeit UTC angegeben und nicht in der lokalen Zeitzone. Das Internet ist global und verwendet nach Möglichkeit nur weltweit eindeutige Zeit-Angaben.

Man muss ein Javascript Datum-Zeit-Objekt des Ablauf-Zeitpunkts herstellen. Dazu wird zuerst ein Objekt der aktuellen Zeit hergestellt (Variable datim im Beispiel).
Aus dem Objekt wird ein Timestamp cx in ms (Millisekunden) erzeugt. In dieser Form lässt sich die Zeit-Differenz (ebenfalls in ms) addieren.
Danach wird aus dem Timestamp cx wieder ein Datum+Zeit-Objkt datim hergestellt.
Zuletzt wird das Objkt mit Funktion toGMTString() codiert und dem Cookie-Text angefügt, so wie im Beispiel gezeigt.

Details zu Datum+Zeit (allgemein, in Javascript

Weitere Cookie-Variablen

Jedes Cookie muss mindestens Name und Wert enthalten: name, value

Fast alle Cookies enthalten zusätzlich die AblaufZeit expires

Darüber hinaus erzeugen die meisten Browser selbst Cookie-Variable, z.B. domain (Ursprungs-Domain), path (URL-Pfad der Webseite), max-age (Ablaufzeit in Sekunden) usw.

Ein Cookie kann eine ganze Menge weiterer Elemente enthalten, z.B. secure (wird nicht in Klartext mit HTTP sondern nur verschlüsselt mit HTTPS gesendet). Diese Elemente werden jedoch seltener verwendet.
Die Variable httponly verhindert den Zugriff mit Javascript, in diesem Fall wird das Cookie im → HTTP-Header transportiert.

Im Übrigen sollte sich ein Webserver niemals auf ein bestimmtes Browser-Verhalten verlassen, selbst wenn das durch eine Cookie-Variable verlangt wird.

Cookie lesen

Das Beispiel rechts zeigt eine vereinfachte Funktion zum Lesen eines Cookies.
Der Name des gesuchten Cookies wird im Argument cnam an die Funktion übergeben.
Die Cookie-Daten werden - falls gefunden - an die Variable cookie_data zugewiesen.
Zu Beginn wird der 'gesammelte Text' aller für diese Webseite gefundenen Cookies an die Variable dc zugewiesen. Man muss diesen Text zerlegen, um daraus die Daten zu isolieren.
Wenn ein Cookie-Text gefunden wurde, dann wird er mit Funktion split() an jedem darin enthaltenen ; Strichpunkt in Teile zerlegt, welche dem → Array dca als Elemente zugewiesen werden. Die Variable ndc erhält die Länge dieses Arrays = die Anzahl der gefundenen Cookies.
Die for-Schleife wird für jedes gefundene Cookie durchlaufen. Dabei wird der codierte Gesamt-Text des jeweiligen Cookies an die Variable txt zugewiesen. Die folgende Text-Analyse ist in einen try-Block eingebettet, um allfällige Fehler abzufangen (sie werden hier einfach ignoriert).
Der rohe Cookie-Text wird an seinem = Zeichen in das Array ta zerlegt, welches 2 Elemente enthalten sollte:
Der Cookie-Name wird decodiert und an die Variable cn übergeben.
Die Cookie-Daten werden decodiert an cv übergeben,
Wenn der Name des gefundenen Cookies cn genau dem gewünschten Namen cnam entspricht, dann werden die Daten an das Ergebnis cookie_data übergeben.
Zuletzt werden die Daten an das aufrufende Programm zurückgegeben.

Details zur Verwendung von Regulären Ausdrücken, die sich zur Text-Bearbeitung und -Analyse (z.B. Funktion split ) besonders gut eignen.
Javascript-Funktion zum Lesn eines Cookies:
function get_my_cookie(cnam) {
var cookie_data="";
var dc=document.cookie;
var ndc=0;
if(dc.length) {
var dca=dc.split(/;/g);
ndc=dca.length;
}
var txt=""; var ta=null;
var cn=""; var cv="";
for(var i=0;i<ndc;i++) {
txt=dca[i];
try{
ta=txt.split(/=/g);
cn=unescape(ta[0]);
cv=unescape(ta[1]);
if(cn==cnam) {cookie_data=cv;}
}
catch(e) {}
}
return cookie_data;
}

Anwendung mit Javascript:
txt=get_my_cookie("MeinKeks");
alert("Cookie-Daten="+txt);