![]() | ![]() ![]() ![]() ![]() ![]() |
Wenn ein cookie mit dem oben angegebenen Befehl angelegt wurde, so kann
er von JavaScripts in allen Dokumenten aus dem gleichen sowie aus darunterliegenden
Verzeichnissen gelesen werden. Wenn auch Dokumente aus anderen Verzeichnissen
auf diesen cookie zugreifen sollen, muß bei Anlegen zusätzlich
der Parameter "path" gesetzt werden, z.B.
Weitere Parameter, die Sie beim Setzen von cookies angeben können,
sind "domain" und "secure".
Genauere Details zur cookie-Spezifikation finden Sie bei
Netscape.
Beschreibung
In diesem Beispiel wurden Sie gefragt, wie Sie angeredet werden möchten.
Sofern Sie eine Antwort gegeben haben, wird die von Ihnen gewünschte
Anrede auf dieser Seite verwendet. Außerdem wird diese Anrede in Form
eines cookies abgespeichert
(Nicht mit MSIE 3.0 bei lokalem Aufruf,
d.h. über das "file:"-Protokoll):
Wenn Sie diese Seite innerhalb der
nächsten 90 Tage wieder besuchen, dann wird auch die gleiche Anrede
wiederverwendet.
Quelltext
<head>
<script language="JavaScript">
<!--
LIVEDAYS=90;
function set_cookie(name, value) {
document.cookie=name+"="+escape(value)+"; expires="+cookie_live();
}
function cookie_live() {
var date=new Date();
date.setDate(date.getDate()+LIVEDAYS);
var gmt=date.toGMTString();
var k1=gmt.indexOf(" ");
var k2=gmt.indexOf(" ", k1+1);
var k3=gmt.indexOf(" ", k2+1);
var str=gmt.substring(0,k2)+"-"+gmt.substring(k2+1,k3)+"-"+gmt.substring(k3+3,gmt.length);
return str;
}
function get_cookie(name) {
var value=null;
if(document.cookie != "") {
var kk=document.cookie.indexOf(name+"=");
if(kk >= 0) {
kk=kk+name.length+1;
var ll=document.cookie.indexOf(";", kk);
if(ll < 0)ll=document.cookie.length;
value=document.cookie.substring(kk, ll);
value=unescape(value);
}
}
return value;
}
//-->
</script>
</head>
<body>
anrede=get_cookie("anrede");
if(anrede == null) {
anrede=prompt("Wie soll ich Sie anreden ?");
if(anrede == null || anrede == "") {
anrede="(unbekannter User)";
} else {
set_cookie("anrede", anrede);
}
}
document.write(anrede);
</body>
Erläuterung
Die Funktion "get_cookie" prüft ob ein cookie mit dem vorgegebenen Namen
gesetzt ist und liefert gegebenenfalls den entsprechenden Wert zurück.
Mit "set_cookie" wird ein neuer cookie angelegt (bzw. ein vorhandener
überschrieben). Eingabeargumente sind der Name des cookies sowie sein
Wert.
Die Funktion "cookie_live" liefert das von document.cookie für
ein Verfallsdatum erwartete
Datumsformat. Es wird ein Datum generiert, das um die in in der Variablen
"LIVEDAYS" angegebenen Tage in der Zukunft liegt.
Wenn Sie mehr über Wirkungsweise, Nutzen und Gefahren (?) von cookies
erfahren möchten, lesen Sie bitte
Laßt die cookies leben!.
Übung
Erstellen Sie ein Formular mit mehreren Eingabefeldern. Beim Abschicken
des Formulars soll eine neue HTML-Seite aufgerufen werden, die
die Eingaben des Anwenders anzeigt. Verwenden Sie zum Aufruf der neuen Seite
ein <form>-tag folgender Art:
<form method="GET" action="anzeig.htm">
Hinweis:
MSIE 3.0 unterstützt keine Query-Strings im Zusammenhang mit dem
"file:"-Protokoll.
[Lösung]
Referenz
[cookie]
[escape]
[unescape]
cookie
Ein cookie ist ein Stück Information, das client-seitig
(also auf Ihrem PC) abgelegt wird.
cookies sind die einzige Möglichkeit, mit JavaScript
Daten dauerhaft zu speichern.
Um ein cookie zu setzen, wird der Eigenschaft document.cookie eine
Name-Wert-Kombination zugewiesen, z.B.
document.cookie="Vorname=Uwe;"
Mit dieser Anweisung wird ein cookie mit dem Namen "Vorname" angelegt,
der den Wert "Uwe" hat.
Wenn die Zeichenkette, die Sie dem cookie als Wert zuweisen wollen, nicht nur
Buchstaben und Zahlen enthält, dann sollte sie mit der Funktion
escape codiert werden (und muß beim späteren Lesen
dann mit unescape decodiert werden) :
document.cookie="Vorname="+escape(wert)+";"
Wenn, wie in diesem Beispiel, keine Angaben zum Verfallsdatum gemacht werden,
dann entspricht die Lebensdauer des
cookies der Laufzeit der aktuellen Browser-Sitzung.
Wenn der cookie auch über die aktuelle Browser-Sitzung hinaus erhalten
bleiben soll, dann muß bei der Definition zusätzlich ein
Verfallsdatum angegeben werden, z.B.
document.cookie="Vorname=Uwe; expires=Wednesday, 09-Nov-99 23:59:59 GMT"
Das Verfallsdatum wird durch das Schlüsselwort "expires" eingeleitet
und muß im GMT-Format (Greenwich Mean Time) angegeben werden.
Leider entspricht das
für cookies vorgegebene Zeitformat nicht exakt dem, das von der
Methode toGMTString() des date-Objektes erzeugt wird:
Zwischen Tag und Monat sowie Monat und Jahr muß jeweils ein
"-" eingefügt werden, außerdem ist das Jahr nur zweistellig
anzugeben.
document.cookie='Vorname=Uwe; path="/bingo/members"; expires=Wednesday, 09-Nov-99 23:59:59 GMT'
Damit können alle Dokumente aus dem Verzeichnis "/bingo/members" und aus
darunterliegenden Verzeichnissen diesen cookie-Eintrag lesen.
Häufig findet man auch "path=/;". Das bedeutet, daß JavaScripts
in allen Dokumenten des gleichen Servers Zugriff auf den cookie haben.
Es bedeutet aber auch: beim Anfordern von allen Dokumenten vom
gleichen Server wird der cookie an diesen Server gemeldet.
Meist ist dies nicht erforderlich.
Gehen Sie sparsam mit cookies um !
Die cookies sind nicht bei allen Anwendern beliebt. Zudem stellen
sie eine zusätzliche Netz-Belastung dar. Und schließlich ist die
Anzahl der cookies pro Web-Server auf 20 begrenzt.
escape
Alle Sonderzeichen innerhalb der Zeichenkette, die als Eingabeargument
übergeben wird, werden
durch eine zweistellige hexadezimale ASCII-Codierung ersetzt, die von einem
Prozentzeichen "%" eingeleitet wird. So liefert z.B.
escape("das ist ein test!")
als Ergebnis die codierte Zeichenkette "das%20ist%20ein%20test%21"; es
wurden also die Leerzeichen durch "%20" und das Ausrufezeichen durch "%21"
ersetzt.
unescape
Die Funktion unescape decodiert mit escape codierte Zeichenketten;
d.h. die vom Prozent-Zeichen eingeleitete ASCII-Codierung wird wieder in das
ursprüngliche Zeichen zurückgewandelt.
unescape kann auch zum decodieren von einem mit der "GET"-Methode eines
Formulars
verpackten
Query-String verwendet werden. In diesem Fall
müssen vor dem Aufruf von unescape alle im Query-String enthaltenen
Pluszeichen "+" durch Leerzeichen " " ersetzt werden.
Damit sind wir am Ende der Beschreibung von JavaScript
Version 1.0. Im nächsten Teil geht es um Version 1.1 . |
![]() ![]() ![]() |