JavaScript - Cookies

Zugegeben, die Keks-Saison neigt sich ihrem Ende zu - aber im Web sind Cookies ein Dauerthema.

Cookies sind ein echtes Dauerthema im Web. Neben Sicherheitslöchern in Java und ActiveX, sind die Cookies als unerwünschte Datenspione in Verruf geraten. Auf dem PC hat sich schon fast eine Software-Industrie gebildet, die Programme zur Abwehr von Cookies in älteren Browsern schreibt - neuere, z.B. Mozilla, haben oft schon einen Cookie-Filter eingebaut. Wie aber bei jeder Technik, die etwas in Verruf geraten ist, muß es auch Vorteile geben, denn sonst würde sie schließlich keiner benutzen.

Cookies sind die einzige Möglichkeit - von VB-Script einmal abgesehen -, einer Webseite, Daten auf die Festplatte des Anwenders zu schreiben. Diese Daten lassen sich in etwa mit Setup-Informationen vergleichen und bestehen üblicherweise aus einer kurzen Textzeile. Über entsprechende Befehle kann der Cookie abgefragt werden, um einen Besucher zu erkennen und die Webseite zu personalisieren oder andere Funktionen aufzurufen.

Zwar sind Cookies nicht Teil des HTTP-Standards, aber sie können trotzdem von fast allen im Internet üblichen Sprachen gesetzt werden.

Wer das Setzen in JavaScript beherrscht, wird wenig Probleme haben, einen Cookie in Perl oder PHP zu setzen, da die Sysntax ähnlich ist.

Gründe für Cookies

Die Gründe, warum eine Seite Cookies benutzt, sind vielfältig. Eine Atari-Seite, die auf Cookies setzt, ist z.B. atariuptodate.de. Die Seite bietet die Möglichkeit, eine persönliche Liste anzulegen, die aus Programmen verschiedener Sparten stammen kann. Der Besucher kann dadurch z.B. die Weiterentwicklung seiner Programme im Auge behalten. Neben dieser Funktion kann aber auch die Anzeige beeinflußt werden. MiNT-Fans können alle MagiC-Programme ausblenden lassen und umgekehrt. Milan-Benutzer, deren Rechner bekanntlich keine niedrige ST-Auflösung kennt, müssen sich nicht die ST-Low-Programme antun.

Eine ähnliche Form der Personalisierbarkeit wird auch von großen Web-Portalen wie z.B. Yahoo unterstützt.

Eine weitere wichtige Rolle spielen Cookies beim Online-Shopping. Amazon identifiziert seine Kunden über einen Cookie.

Die meisten Cookies sammeln sich allerdings durch Anbieter wie DoubleClick, die Online-Werbung schalten.

Sicherheitsrisiken

Vielen ist unwohl, das eine Webseite einfach etwas auf die Festplatte schreibt. Dabei sind Cookies engen Grenzen gesetzt: zum einen werden sie vom Browser an einer festgeschriebenen Stelle abgespeichert und zum anderen sind sie zum Verbreiten von Viren, Trojanern oder ähnlichen Schädlingen völlig ungeeignet.

Ein Risiko stellen Cookies nur insofern dar, als sie den "gläsernen Surfer" erlauben. DoubleClick kann über das geschickte Einbinden von Werbegrafiken und das Benutzen eines Cookies mit einer Identifizierungsnummer Daten sammeln. Unter "Daten" versteht man alles, was automatisch übermittelt wird: Name und IP-Adresse des Computers, Browsername und die aktuelle und vorherige Webseite. Das dadurch DoubleClick in Verruf gekommen ist, liegt mit an der Popularität dieses Anzeigen-Netzwerkes, denn andere Anbieter machen es nicht anders.

Allerdings sollten all jene, die jetzt laut "Skandal" rufen, ihre Brieftasche überprüfen, ob dort nicht eine Kunden- oder Payback-Karte befindet. Diese dienen dem gleichen Zweck und gehen generell viel freizügiger mit den persönlichen Daten um.

Die Festplatte kann auch nicht mit Cookies überfüllt werden, da jeder Browser ein bestimmtes Limit setzt.

Cookies setzen

Cookies können nicht über Domaingrenzen hinweg gesetzt werden. Das bedeutet, das msn.de nicht auf die gespeicherten Cookies von yahoo.de zugreifen kann. Nun hebelt DoubleClick aber genau diesen Schutz aus. Sie machen sich zu Nutze, das Anzeigen normalerweise nicht auf dem gleichen Server wie die Web-Seite gespeichert werden. Um an Werbeeinnahmen zu kommen, wird ein Werbeservice wie DoubleClick abonniert. Wenn über das Internet nun die Daten für das Werbebild abgefragt werden, wird gleichzeitig der DoubleClick-Cookie gesetzt, bzw. abgefragt.

Für einen Cookie existieren sechs Parameter. Der erste gibt den Namen des Cookies an, es folgt der Name. Als drittes läßt sich ein Verfallsdatum festlegen. Dies ist z.B. bei zeitlich begrenzten Aktion, wie Gewinnspielen, sinnvoll. Der vierte und fünfte Parameter ist der Pfad sowie die Domain, für den der Cookie gültig ist. Zu guter letzt wird festgelegt, ob eine sichere Verbindung (https://) als Voraussetzung für die Benutzung des Cookies existieren muß.

Die kürzeste Form, einen Cookie zu setzen, ist folgende:

<SCRIPT LANGUAGE="JavaScript">
<!--
document.cookie="farbe=yellow; path=/; expires=Mon, 01-Dec-2002 00:00:00 GMT";
//-->
</SCRIPT>

Der Cookie mit dem Namen "farbe" bekommt den Wert "yellow". Da der Domainname nicht übergeben wird, übernimmt der Cookie den aktuellen Domainnamen. Es ist nicht möglich, das eine Seite wie z.B. atariuptodate.de einen Cookie mit dem Domainnamen yahoo.com setzt. Die Cookie-Zeile mit gesetztem Domainnamen:

document.cookie="farbe=yellow; path=/; domain=atariuptodate.de;
expires=Sun, 01-Dec-2002 00:00:00 GMT";

Der Wert für Domain muß übrigens immer mindestens zwei Punkte enthalten, "domain=atariuptodate.de" ist also nicht möglich.

Wird der Pfad auf "/" gesetzt, können auch alle Unterverzeichnisse den Cookie lesen. Eigentlich muß dieser Parameter dann auch nicht gesetzt werden, allerdings existiert in älteren Versionen von Netscape einen Bug, der auftritt, wenn ein Ablaufdatum, aber kein Pfad angegeben wird.

In den verdienten Ruhestand darf der Cookie schließlich am ersten Dezember treten. Wird das Ablaufdatum nicht gesetzt, gilt der Cookie nur für die Session. Unter einer Session wird i.d.R. die Zeit verstanden, die der Browser offen ist. Viele Browser unterscheiden in ihren Sicherheitseinstellungen zwischen Session und normalen Cookies.

Eine aufgedröselte Variante stammt von Bill Dortch:

<SCRIPT LANGUAGE="JavaScript"> 
<!--
function setCookie (name, value, expires, path, domain, secure) 
{ 
document.cookie = name + "=" + escape(value) + 
((expires) ? "; expires=" + expires : "") + 
((path) ? "; path=" + path : "") + 
((domain) ? "; domain=" + domain : "") + 
((secure) ? "; secure" : ""); 
} 
//-->
</SCRIPT> 

Ab jetzt kann sehr einfach mit

setCookie("farbe", "yellow", "Sun, 01-Dec-2002 00:00:00 GMT", "/"); 

ein Cookie gesetzt werden. Das ist besonders praktisch, wenn mehrere Cookies gesetzt werden sollen.

Cookies auslesen

Das Auslesen von Cookies ist eigentlich ganz einfach, denn document.cookie ist bereits mit den Werten der Cookies gefüllt. Wurden mehrere Cookies gesetzt, sieht er z.B. so aus:

farbe=yellow;text=black;verweise=green;

Um diese Werte bequemer auslesen zu können, bedienen wir uns wieder einer Funktion:

<script>
<!--
var cookieWert;
function holeCookie(Keksname)
{
alleCookies=document.cookie;
cookieArr=alleCookies.split(";");
for(var i=0;i<cookieArr.length;i++)
    {
    if(cookieArr[i].split("=")[0] == Keksname)
        {
        cookieWert=cookieArr[i].split("=");
        cookieWert=unescape(cookieWert[1]);
        return true;
        }
    }
    return false;
}
//-->
</script>

Sinn der Funktion ist es, ihr einen Cookienamen (z.B. "farbe") zu übergeben und dafür den entsprechenden Wert ("yellow") zu erhalten.

In Keksname steht der Name des Cookies. In "alleCookies" wird der gesamte Cookiestring gespeichert und daraufhin zerteilt. Aus den einzelnen Werten wird eine Feldvariable gebildet, cookieArr. cookieArr hat, legt man das obige Beispiel zugrunde, folgende Werte:

cookieArr[0]   farbe=yellow
cookieArr[1]    text=black
cookieArr[2]    verweise=green

Um den gewünschten Wert zu erhalten, geht die Funktion alle Elemente der Feldvariable durch. Jedes Element wird erneut zerlegt, diesmal mit dem "="-Zeichen als Trenner. Wenn der Text links vom Gleichheitszeichen mit Keksname übereinstimmt, wird die Variable cookieWert gesetzt. Ein Spezialfall ist die JS-Funktion unescape(). Mit ihr werden die sogenannten Escape-Sequenzen in verständlichen Text gewandelt. So entspricht z.B. %53 dem "S". Die Codierung in Escape-Sequenzen wird vom Browser vorgenommen.

Wurde ein Wert gefunden, wird true (=wahr) zurückgegeben. Der Wert ("yellow") steht in cookieWert.

Damit steht dem fröhlichen Setzen von Cookies nichts mehr im Wege. Ein guter Stil ist es übrigens, den Besucher darauf hinzuweisen, warum und wofür ein Cookie gespeichert wird.

Quellen:

[1] http://www.cookiecentral.com/
[2] http://www.netscape.com/newsref/std/cookie_spec.html


Mia Jaap
Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]