[Beschreibung] [Quelltext] [Erläuterung] [Übung] [Referenz]

Und zum Schluß noch einen Keks, ?

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.

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.
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.

Weitere Parameter, die Sie beim Setzen von cookies angeben können, sind "domain" und "secure". Genauere Details zur cookie-Spezifikation finden Sie bei Netscape.

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 .

home
Erstellt von © Uwe Brinkmann - bingo e.V. - Stand 13.04.97