| 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: |
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. |
SicherheitEin 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. |
MarketingDie 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. |
JavascriptDie Javascript-Eigenschaft cookieEnabled des Objekts navigator gibt Auskunft, ob der verwendete Browser Cookies zulässt.● Live-Daten ihres Browsers: navigator.cookieEnabled = ?
PHPNicht 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. |
ApacheDer 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 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.
|
CodierungDie 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 |
AblaufzeitDie 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); |
|