Robin H.: Speichern von Variablen in Cookies

Hallo,
Ich hab mal eine Frage zu Cookies: Kann man in Cookies mehrere eindeutige Variablen speichern? Ich möchte eine Lernumgebung programmieren, wo der Nutzer viele Daten auf unterschiedlichen HTML Seiten eingibt. Diese Daten (variablen) sollen erst zum Schluss
ausgewertet werden. Nun, ist es ratsam das über cookies zu realisieren und wenn ja wie? - oder gibt es gar noch andere, günstigere Lösungen/Möglichkeiten?

mfg, RObin.

  1. Hi,

    Ich hab mal eine Frage zu Cookies: Kann man in Cookies mehrere eindeutige Variablen speichern? Ich möchte eine Lernumgebung programmieren, wo der Nutzer viele Daten auf unterschiedlichen HTML Seiten eingibt. Diese Daten (variablen) sollen erst zum Schluss
    ausgewertet werden. Nun, ist es ratsam das über cookies zu realisieren und wenn ja wie? - oder gibt es gar noch andere, günstigere Lösungen/Möglichkeiten?

    zum einen könntest Du mehrere Cookies mit unterschiedlichem Namen verwenden. Oder ein Cookie und die Daten in einem bestimmten Format darin speichern (z.B. variable1=text,variable2=text ...) allerdings brauchst Du dafür eindeutige Trenner (hier das Komma), um den String später wieder zerlegen zu können. Der m.E. eleganteste Weg für Dein Problem sind Sessions. In dem Cookie wird nur eine eindeutige Kennung abgelegt (Session-ID) die dem Client zugeordnet ist. Auf dem Server wird eine Tabelle geführt, in der verschiedene Variablen den jeweiligen Session-IDs zugeordnet sind. Das klingt jetzt vielleicht kompliziert, ist aber ein Kinderspiel mit PHP (da gibts ein einfach zu verwendendes Session-Management). Und für Perl gibt`s da sicher auch Module.

    Es hängt auch ein wenig von der Programmiersprache ab. Wenn Du JavaScript verwendest, scheidet Session-Management IMHO aus. Bei serverseitigen Sprachen bietet es sich geradezu an.

    Viele Grüsse
    Achim Schrepfer

  2. Hallo,
    Ich hab mal eine Frage zu Cookies: Kann man in Cookies mehrere eindeutige Variablen speichern? Ich möchte eine Lernumgebung programmieren, wo der Nutzer viele Daten auf unterschiedlichen HTML Seiten eingibt. Diese Daten (variablen) sollen erst zum Schluss
    ausgewertet werden. Nun, ist es ratsam das über cookies zu realisieren und wenn ja wie? - oder gibt es gar noch andere, günstigere Lösungen/Möglichkeiten?

    mfg, RObin.

    Hallo Robin,

    ich hatte mal ein kleines Testprogramm für Cookies in JavaScript geschrieben. Ist nur auf IE getestet. Hier kommts:

    -Schnipp---Datensatz:cookies.js------------------

    //////////////// (c) Hans@Stortnik.de
    // cookies.js //     Das Programm kann für private Zwecke frei benutzt werden.
    ////////////////
    //
    // Mit "cookie_write" wird ein "name" und ein zugehöriger "wert" beim Betrachter
    // der Webseite gespeichert, und mit "cookie_read" kann "wert" wieder gelesen
    // werden, wenn nach "name" gefragt wird. "name" und "wert" sind Strings.
    // Mehrere solcher name/wert-Paare sind möglich und werden im selben Cookie
    // abgespeichert, getrennt durch Semikolon. Um in "wert" auch Semikolons und
    // Gleichheitszeichen zulassen zu können, werden diese als die Zeichen "Ý"
    // bzw. Ð abgespeichert. Das Zuweisungsende wird mit"Þ" markiert; dadurch ist
    // in "wert" auch eine Zeichenfolge zugelassen, die bei einem anderen Parameter
    // mit "name" übereinstimmt.
    // Die Angabe der Verfallszeit "verfall", gerechnet in sec ab dem Setzen der
    // Variablen in dem Cookie, ist obligatorisch. (Beispiel: Für eine 1 Jahr gültige
    // Variable ist 365*24*60*60 anzugeben.) Jede Variable "name" hat ihre eigene
    // Verfallszeit.
    // Cookies werden bei ihrer erstmaligen Erzeugung automatisch dem Verzeichnis der
    // URL der aktuellen Webseite zugeordnet und können danach auch in deren Unter-
    // verzeichnissen benutzt werden. Falls bei einem Leseversuch ein Cookie oder die
    // abgefragte Variable nicht vorhanden sind, wird ein Nullstring zurückgegeben.
    //
    // Cookie schreiben
    // ----------------
    function cookie_write (name, wert, verfall) {
                      var  name, wert, verfall;
     var n = name.replace(/=/g,"Ð");
         n =    n.replace(/;/g,"Ý");
     var w = wert.replace(/=/g,"Ð");
         w =    w.replace(/;/g,"Ý");
     var d = new Date();
     var t = new Date(d.getTime() + verfall*1000);
     document.cookie=n+"="+w+"Þ;expires="+t.toGMTString()+";" ;
    }
    //
    // Cookie lesen
    // ------------
    function cookie_read (name) {
                     var  name;
     var n = name.replace(/=/g,"Ð");
         n =    n.replace(/;/g,"Ý")+"=";
     var wert="";
     var w=document.cookie;
     //  alert(w); // Test
     var u=w.indexOf(n,0);
     if (u > -1) {
        u=u + n.length;
        if (u>n.length) {
           u=w.indexOf("Þ; "+n,0);
           if (u>-1) {u=u+n.length+3} else {w=""};
        }
        w    = w.substring(u,w.indexOf("Þ",u));
        w    = w.replace(/Ý/g,";");
        wert = w.replace(/Ð/g,"=");
     }
     return wert;

    -schnapp----------------------------------------

    -schnipp---------Datensatz:cookie-Test.htm------

    <html>
    <head><title>Cookie-Schreib-Test</title></head>

    <script language="JavaScript" src="./cookies.js"
            type="text/javascript"> </script>

    <body bgcolor="#ffeeee">
    <center>
    <h2><br>Cookie-Schreib-Test<br><br></h2>
    <h3>
    Es wird ein Name (eine beliebige Zeichenfolge) eingegeben,<br>
    ein zugehöriger Wert (auch eine beliebige Zeichenfolge)<br>
    und ausserdem eine Verfallszeit in Sekunden, <br>
    die angibt, wie lange die Zuordnung von Name und Wert gelten soll.<br>
    Nach Anklicken von "Speichern" ist die Zuordnung als ein <i>Cookie </i>gespeichert.<br>
    Durch Abfrage des richtigen Namens kann der Wert wiederbeschafft werden,<br>
    solange die Verfallszeit nicht überschritten ist,<br>
    auch wenn der Rechner zwischenzeitlich neu gestartet wurde.<br><br>

    <form name="F1" onSubmit="cookie_write(
       document.F1.N.value,
       document.F1.W.value,
       document.F1.V.value
    )">
    Name:    <input type=text name="N" size=40 maxlength=256><br>
    Wert:    <input type=text name="W" size=39 maxlength=256><br><br>
    Verfall: <input type=text name="V" size=35 maxlength=256><br><br>
             <input type=submit value="Abspeichern"><br><br>
    </form>

    <form name="F2" onSubmit="alert(
       document.F2.N.value
       + ' = '
       + cookie_read( document.F2.N.value)
    )">
     Name:   <input type=text name="N" size=40 maxlength=256><br>
             <input type=submit value="Lesen"><br><br>
    </form>
    <br><br>

    </h3>
    </center>
    </body></html>

    -Schnapp------------------------------------------

    Ist alles ausreichend selbsterklärend? Vielleicht hilft's dir weiter.

    Gruss
    Hans35

    1. Ist alles ausreichend selbsterklärend? Vielleicht hilft's dir weiter.

      ja, bestens! vielen dank :)))

  3. Hi Robin,

    Kann man in Cookies mehrere eindeutige Variablen
    speichern?

    die Interpretation des Inhalts ist Deine Sache.
    Wenn Du ihn so abspeicherst, daß Du ihn auch wieder analysieren kannst, dann -> ja.

    Ich möchte eine Lernumgebung programmieren, wo der
    Nutzer viele Daten auf unterschiedlichen HTML Seiten
    eingibt. Diese Daten (variablen) sollen erst zum
    Schluss ausgewertet werden.
    Nun, ist es ratsam das über cookies zu realisieren
    und wenn ja wie? - oder gibt es gar noch andere,
    günstigere Lösungen/Möglichkeiten?

    In jedem Falle brauchst Du irgend eine Art von Gedächtnis.
    Spontan fallen mir neben dem Cookie zwei weitere Möglichkeiten ein:
    a) Serverseitiges Session-Management (also Speichern
       der Informationen in einer Datei auf dem Server und
       Identifikation des Benutzers über eine Session-ID)
    b) Durchreichen der Informationen von Seite zu Seite
       (also ein inkrementell wachsendes, temporäres
       Gedächtnis).

    Cookies bedeuten eine zusätzliche Abhängigkeit (weil der Benutzer ihre Verwendung abschalten kann).
    Wenn Deine Aufgabenstellung (!) Dir diese Abhängigkeit erlaubt, dann nimm sie - wenn nicht, dann nimm eine der anderen, Dir gebotenen Möglichkeiten.

    Viele Grüße
          Michael