MudGuard: Cookie: Auslesen von expires und path?

Hi,

ich habe (erstmal zu Testzwecken, weil ich schon ewig nichts mehr mit Cookies gemacht habe) folgenden Code gebastelt (der ganze Krempel mit Bedingungen, unter denen der Cookie gesetzt wird, kommt dann, wenn ich erstmal verstanden hab, warum das Setzen des Cookies nicht so will wie ich):

  
alert(document.cookie);  
  
var ablauf = new Date();  
ablauf.setTime(ablauf.getTime() + (30 * 24 * 60 * 60 * 1000)); //ca. 30 Tage (kommt auf die Stunde nicht an bei Sommerzeit)  
var mycookie = "menueausblenden=ja; expires=" + ablauf.toGMTString() + "; path=/";  
  
alert(mycookie);  
  
document.cookie = mycookie;  

Ich gebe also erstmal das Cookie aus.
Dann berechne ich einen Ablaufzeitpunkt, bastel mein Cookie zusammen mit expires und path.
path setze ich, weil der Cookie für alle Seiten der Domain gelten soll, auch wenn er in einer tief verschachtelten Seite gesetzt wird.
Das lasse ich mir anzeigen, dann setze ich das Cookie.

Ok, beim ersten Aufruf der Seite ist der erste Alert erwartungsgemäß leer (wurde ja noch kein Cookie gesetzt).

Dann wird mir angezeigt
menueausblenden=ja; expires=Mon, 04 Apr 2005 07:25:04 GMT; path=/
Sieht korrekt aus, das Setzen des Cookies sollte also klappen.

Neuer Aufruf der Seite.
Der erste Alert, der den Cookie anzeigen soll, zeigt nur
menueausblenden=ja

Seltsam. Das Setzen des Cookies hat scheinbar geklappt. Aber nur teilweise.
Oder wo ist die Information zu expires und path abgeblieben?

Sowohl Firefox 1.0.1 als auch Mozilla 1.7.3 als auch IE 6.0 als auch Opera 7.53 zeigen expires und path nicht an.

Gibt es eine Möglichkeit, per Javascript an expires/path lesend ranzukommen?

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  1. Hi,

    Nachtrag:

    Wenn ich im Firefox unter Options - Privacy - Cookies - View Cookies nachschaue, ist mein Cookie inklusive expires und path dort vorhanden.
    Beim Mozilla unter Tools - Cookie Manager - Manage stored Cookies auch.
    Opera (Tools - Cookies) zeigt den Zeitpunkt an, aber nicht den Pfad (das macht er aber bei allen Cookies nicht).

    Also gehe ich davon aus, daß das Eintragen der beiden Informationen auch geklappt hat.

    Beim IE hab ich auf die Schnelle nicht gefunden, wo der die Kekse vor mir versteckt ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Halihallo MudGuard

    Dann wird mir angezeigt
    menueausblenden=ja; expires=Mon, 04 Apr 2005 07:25:04 GMT; path=/
    Sieht korrekt aus, das Setzen des Cookies sollte also klappen.
    Neuer Aufruf der Seite.
    Der erste Alert, der den Cookie anzeigen soll, zeigt nur
    menueausblenden=ja
    Seltsam. Das Setzen des Cookies hat scheinbar geklappt. Aber nur teilweise.
    Oder wo ist die Information zu expires und path abgeblieben?

    Diese Information wird nur gespeichert, aber niemals übertragen (sei
    dies durch auslesen von HTTP_COOKIE oder mittels document.cookie).

    Zusatzinformationen wie expires, path, secure, domain etc. können bei
    der Definition und Speicherung eines Cookies angegeben werden, jedoch
    ist deren Verwendung nur für den Browser interessant und deswegen
    wird diese Information auch nicht mehr beim Auslesen angezeigt. Wenn
    du selber diese Informationen für deine Zwecke benötigst, musst du
    sie explizit im name=value-Paar kodieren/speichern.

    Deine Browser und dein Script funktioniert also völlig einwandfrei.

    Es macht den Anschein, dass Netscape bei der Definition des
    Cookie-Konzeptes der Ansicht war, dass diese Zusatzinformationen
    keinen Wert für den Programmierer hat (bzw. davon ausgegangen wird,
    dass er selber ja weiss, mit welchen Zusatzinformationen er den
    Cookie bestückt hat). Damit kann ich mich eigentlich bis aus expires
    anfreunden. expires hielte ich doch für eine nützliche Information,
    da diese im Normalfall auch nicht staatisch ist.
    Einen Vorteil dieser Entscheidung sehe ich darin, dass die Verarbeitung von name=value-Paaren gegenüber name=value; expires=...;
    ... einfacher ist.

    Viele Grüsse

    Philipp

    1. Hi,

      Danke für Deine Antwort.

      Diese Information wird nur gespeichert, aber niemals übertragen (sei
      dies durch auslesen von HTTP_COOKIE oder mittels document.cookie).

      Schade.
      Mir würde es ja schon reichen, wenn das lokal per Javascript wieder verfügbar wäre.

      Deine Browser und dein Script funktioniert also völlig einwandfrei.

      Das habe ich befürchtet.

      Wenn du selber diese Informationen für deine Zwecke benötigst,
      musst du sie explizit im name=value-Paar kodieren/speichern.

      Naja, ist doch eigentlich unsinnig, wenn ich dieselbe Information mehrfach speichern muß.

      Es macht den Anschein, dass Netscape bei der Definition des
      Cookie-Konzeptes der Ansicht war, dass diese Zusatzinformationen
      keinen Wert für den Programmierer hat (bzw. davon ausgegangen wird,
      dass er selber ja weiss, mit welchen Zusatzinformationen er den
      Cookie bestückt hat). Damit kann ich mich eigentlich bis aus expires
      anfreunden. expires hielte ich doch für eine nützliche Information,
      da diese im Normalfall auch nicht staatisch ist.

      Eben. Aus expires und der aktuellen Zeit könnte man die Restlaufzeit und der vergangenen Laufzeit ermitteln.

      Einen Vorteil dieser Entscheidung sehe ich darin, dass die Verarbeitung von name=value-Paaren gegenüber name=value; expires=...;
      ... einfacher ist.

      Naja, wer in der Lage ist, einen String an '=' aufzuteilen, sollte auch in der Lage sein, einen String an '; ' aufzuteilen.

      Mir wären aber auch Extra-Eigenschaften a la document.cookieExpires und document.cookiePath recht ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hi,

    noch ne Frage zu Cookies. Ich hab jetzt also meinen schönen Cookie gesetzt.

    Jetzt geht es mir wie dem Zauberlehrling:

    Herr, die Not ist groß!
    Die ich rief, die Cookies,
    Werd ich nun nicht los.

    Ein

    document.cookie = "";

    bewirkt rein gar nichts.

    Wer kann mir also den Besen reichen, um die Geister bzw. Cookies wieder loszuwerden?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. hi,

      Herr, die Not ist groß!
      Die ich rief, die Cookies,
      Werd ich nun nicht los.

      Ein
      document.cookie = "";
      bewirkt rein gar nichts.

      Wer kann mir also den Besen reichen, um die Geister bzw. Cookies wieder loszuwerden?

      kurzes googlen bringt mich zu http://www.onetwomax.de/magazin/8613/Kekse_in_JavaScript.htm - und dort wird zum löschen eines cookies die funktion writeCookie() mit writeCookie('myCookie', '', 0) aufgerufen.

      was die dann macht, läuft letztendlich auf
      document.cookie = "myCookie=";
      hinaus.

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      1. Hi,

        Ein
        document.cookie = "";
        bewirkt rein gar nichts.
        kurzes googlen bringt mich zu http://www.onetwomax.de/magazin/8613/Kekse_in_JavaScript.htm - und dort wird zum löschen eines cookies die funktion writeCookie() mit writeCookie('myCookie', '', 0) aufgerufen.
        was die dann macht, läuft letztendlich auf
        document.cookie = "myCookie=";
        hinaus.

        Hm. Damit ist der Cookie aber nach wie vor vorhanden, nur hat er jetzt einen leeren Wert.

        Ah, kombiniert mit einem expires in der Vergangenheit verschwindet er.

        (zumindest aus Javascript-Sicht - unter Tools - Options - Privacy - Cookies wird er noch aufgelistet als "expires at end of session")

        Ist zwar absolut unlogisch, daß document.cookie = ""; nicht das Löschen bewirkt, aber so ist Javascript nun mal ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. hi,

          Hm. Damit ist der Cookie aber nach wie vor vorhanden, nur hat er jetzt einen leeren Wert.

          hatte das beispiel von der seite nicht selber ausprobiert ...

          Ah, kombiniert mit einem expires in der Vergangenheit verschwindet er.

          sollte er dann ja auch :-)

          (zumindest aus Javascript-Sicht - unter Tools - Options - Privacy - Cookies wird er noch aufgelistet als "expires at end of session")

          hm - hast du mal die sicht anderer "cookieempfänger" geprüft? - ob also beispielsweise ein serverseitiges script ihn noch übergeben bekommt?

          Ist zwar absolut unlogisch, daß document.cookie = ""; nicht das Löschen bewirkt, aber so ist Javascript nun mal ...

          finde ich nicht so unlogisch - schließlich erhältst du doch unter document.cookie _alle_ cookies (im gültigkeitsbereich des URLs).
          also müsste das auch _alle_ cookies löschen - was aber dann, wenn du nicht alle, sondern nur ein bestimmtes der von dir gesetzten löschen willst?

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hi,

            hm - hast du mal die sicht anderer "cookieempfänger" geprüft? - ob also beispielsweise ein serverseitiges script ihn noch übergeben bekommt?

            Nö, weil ich den Cookie nur für Javascript brauche.

            Ist zwar absolut unlogisch, daß document.cookie = ""; nicht das Löschen bewirkt, aber so ist Javascript nun mal ...
            finde ich nicht so unlogisch - schließlich erhältst du doch unter document.cookie _alle_ cookies (im gültigkeitsbereich des URLs).

            Eben. Wenn ich mit x = document.cookie; alle Cookies in x gespeichert kriege, sollte konsequenterweise x = ""; document.cookie = x; auch alle Cookies löschen. Aber das löscht keinen einzigen.

            also müsste das auch _alle_ cookies löschen - was aber dann, wenn du nicht alle, sondern nur ein bestimmtes der von dir gesetzten löschen willst?

            Will ich ja gar nicht. ;-)

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Halihallo MudGuard

              Ist zwar absolut unlogisch, daß document.cookie = ""; nicht das Löschen bewirkt, aber so ist Javascript nun mal ...
              finde ich nicht so unlogisch - schließlich erhältst du doch unter document.cookie _alle_ cookies (im gültigkeitsbereich des URLs).
              Eben. Wenn ich mit x = document.cookie; alle Cookies in x gespeichert kriege, sollte konsequenterweise x = ""; document.cookie = x; auch alle Cookies löschen. Aber das löscht keinen einzigen.

              Ich halte das durchaus für logisch. Schliesslich ist ein Cookie kein
              Javascript-String, sondern ein Informationspacket, welches über einen
              Namen und einen Gültikeitsraum (URL,Domain) eindeutig definiert ist.
              Wenn man einen Cookie löschen will, muss dieser eindeutig festgelegt
              werden und expires auf einen vergangenen Zeitpunkt gesetzt sein.

              Ein document.cookie="" definiert nunmal keinen Cookie: (Name+URL)
              fehlen und deshalb wird auch kein Cookie gelöscht oder geändert.

              Wenn document.cookie ein String zugewiesen bekommt, wird dieser
              geparsed. Falls keine gültige Cookie-Definition darin gefunden wird,
              wird die Zuweisung ignoriert (status quo bleibt erhalten).

              Ein Cookie ist gekapselt. Er muss, falls er gelöscht oder geändert
              werden soll, eindeutig "angesprochen" werden. Es gibt in diesem
              Sinne keine Wildcard-Modification (delete cookie *.* oder so
              ähnlich).

              Viele Grüsse

              Philipp