Christine Braunschweig: cookie: expire ja - aber bitte nicht gleich

Guten Abend,

ich sitze hier schon eine ganze Weile und probiere und probiere, und ärgere mich. Ich hab fast alles hinbekommen, was ich mir vorgenommen hatte (vorausgefülltes Formular m. Textfeldern & Radiobuttons mit Hilfe von Cookies), aber jetzt trete ich seit Stunden auf der Stelle. Komme einfach nicht drauf,  was in meinem js nicht stimmt.

Kurze Problemskizze: Meine Funktion Cookiesetzen erstellt ein cookie, falls noch keins vorhanden;
Die zahlreichen alert-Befehle dokumentieren meine erfolglose Fehlersuche: d.h.:  jede alert-Testbohrung
förderte das gewünschte Ergebnis zu Tage. alert(time) liefert aktuelle Timeangabe in Milisec., alert(cookieex) die durch Addition erzeugte expire-Zeitangabe, alert(expires) den erzeugten Cookieeintrag der Form "expires=.......(Zeitangabe in ms) und alert(Cookieinhalt) schließlich den gewünschten Cookie-String.

Und jetzt kommts: Trotz alledem übersteht mir das Ding die Beendigung der Browser-Session Periode nicht. Jedesmal, wenn ich den Browser schließe (Netscape u. IE getestet), geht beim neuerlichen Öffnen der Formularseite nichts mit vorausgefülltem Formular. Innerhalb der Sessions klappts. Die Browser sind richtig eingestellt, habe ich schon überprüft.

Ich hoffe sehr, daß da draußen jemand an seinem Rechner sitzt, einen Blick auf die Sache wirft und sagt: na klar, kann doch gar nicht gehen, da muß man ..... und der armen Braunschweig, der langsam die Zigaretten ausgehen, auf die Sprünge hilft.-
Christine

function Cookiesetzen()
{
   var Anrede, Vorname, Nachname, Firma, Abteilung, Strasse, Plz, Ort, Land, expires, jetzt, time,           Cookieinhalt;
  
  
  jetzt = new Date();
  time = jetzt.getTime();
  alert(time);
  cookieex = time + 1000*60*60*24*5;
  alert(cookieex);

for(u = 0; u <= 1; u++)
{
   if(document.forms[0].v1[u].checked == true)
  Anrede = u;
}

Vorname = document.forms[0].elements[2].value;
  Nachname = document.forms[0].elements[3].value;
  Firma = document.forms[0].elements[4].value;
  Abteilung = document.forms[0].elements[5].value;
  Strasse = document.forms[0].elements[6].value;
  Plz = document.forms[0].elements[7].value;
  Ort = document.forms[0].elements[8].value;
  Land = document.forms[0].elements[9].value;
  expires = "expires="+cookieex;
  alert(expires);  
      Cookieinhalt=Anrede+"#"+Vorname+"#"+Nachname+"#"+Firma+"#"+Abteilung+"#"+Strasse+"#"+Plz+"#"+Ort+"#"+Land+"#"+expires;

document.cookie = Cookieinhalt;
  alert(Cookieinhalt);
}

  1. hallo

    »»   jetzt = new Date();
    »»   time = jetzt.getTime();
    »»   alert(time);
    »»   cookieex = time + 1000*60*60*24*5;
    »»   alert(cookieex);

    diese zeilen würde ich durch folgendes ersetzen:

    jetzt = new Date();
      jetzt.setTime(jetzt.getTime() + 1000*60*60*24*5);
      cookieex = jetzt.toGMTString();
      alert(cookieex);

    und zwar solltest du 1. keine variable namens time verwenden da es time in javascript schon gibt und 2. muss die cookie-zeit im gmt-format sein!

    dann kommt da noch diese zeile:

    »»       Cookieinhalt=Anrede+"#"+Vorname+"#"+Nachname+"#"+Firma+"#"+Abteilung+"#"+Strasse+"#"+Plz+"#"+Ort+"#"+Land+"#"+expires;

    damit die zeit wann das cookie abläuft auch vom browser erkannt wird musst du als trennzeichen zwischen expires=x und dem rest des cookies ein strichpunkt setzen und kein gatterzeichen! also diese zeile folgendermassen:

    Cookieinhalt=Anrede+"#"+Vorname+"#"+Nachname+"#"+Firma+"#"+Abteilung+"#"+Strasse+"#"+Plz+"#"+Ort+"#"+Land+";"+expires;

    beachte aber auch da der browser das ablaufdatum jetzt nicht mehr als teil des cookies ansieht sondern erkennt und das cookie an sich jetzt nicht mehr #expires=x am ende enthält.
    ich weiss jetzt nicht wie der teil des scriptes aussieht der das cookie ausliesst aber da solltest du auch noch drauf achten...
    im zweifelsfall ersetzt die besagten stellen durch folgendes dann kann eigentlich gar nichts schief gehen:

    jetzt = new Date();
      jetzt.setTime(jetzt.getTime() + 1000*60*60*24*5);
      time = "expires="+jetzt;
      cookieex = jetzt.toGMTString();
      alert(cookieex);

    Cookieinhalt=Anrede+"#"+Vorname+"#"+Nachname+"#"+Firma+"#"+Abteilung+"#"+Strasse+"#"+Plz+"#"+Ort+"#"+Land+"#"+time+";"+expires;

    übrigens hast du das mit dem falschen format der zeit nur deswegen nicht gemerkt da der browser diese zeit vorher ja als teil das cookies angesehen hat - würdest du jetzt das .toGMTString() weglassen würde das ganze nicht funktionieren.
    als letztes will ich dich noch darauf hinweisen dass du unbedingt dafür sorgen solltest dass die variablen die nacher in das cookie geschrieben werden (Anrede - Land) kein istgleich, semikolon oder gatterzeichen enthalten (=;#)!
    oder du ersetzt diese und andere steuerzeichen jedesmal vor dem schreiben in das cookie durch ihren hexadezimalwert - also mit escape() - und nachdem du beim auslesen des cookies wieder alles in variablen oder so ähnlich hast musst du diese dann natürlich mit unescape() wieder in ihren alten zustand umwandeln.

    achso, ich sollte noch dazu sagen dass ich mich nur mit dem ms ie auskenne - von netscape hab ich keine ahnung aber soweit ich weiss gibts wenigstens bei cookies keine unterschiede. unter ms ie läufts aber auf jeden fall.

    ..... und der armen Braunschweig, der langsam die Zigaretten ausgehen, auf die Sprünge hilft.-

    mensch... rauchen is soooo ungesund! lass das doch ma :)

    cui

    1. Guten Morgen spawn.

      Ich bin die letzte Stunde trübsinnig zum wiederholten Mal auf Lösungssuche im Archiv unterwegs gewesen, dachte schon, mein erstes bescheidenes Posting wird ignoriert. Und dann schaue ich nochmal und finde Deine Antwort, bestens! Ich bin schon beim Ausprobieren, dies nur als kleine Rückmeldung, Danke jetzt schon für erhellende Hinweise, ich hoffe, ich kriege heute nacht noch alles zum Laufen..
      Christine, - jetzt erst mal lüften -

      1. Hey spawn, funktioniert! Vielen dank nochmal, allein hätte mich das wohl noch etwas Zeit gekostet.

        Gewußt wie! Der fehlende Strichpunkt und das falsche Zeitformat samt etwas wirrer expire-Zeitpunkt Erzeugung haben tatsächlich zuvor Hirn und Cookie blockiert.
        Ich hab mir die Self-Doku zum date Objekt gerade nochmal vorgenommen und: ahhhhh, verstehe.
        Also dann, c.

        1. hello again!

          freut mich dass ich dir gelfen konnte!
          das gibt mir wieder etwas auftrieb :)
          gerade eben habe ich auch eine lösung zu meinem problem gefunden...
          dann is ja wieder alles in butter :)

          und cu