Linuchs: Javascript: Ablaufdatum Cookie auslesen

Moin,

ich möchte per JS vorhandene Cookies anzeigen, deren Wert und deren Ablaufdatum.

alert( document.cookie );

ergibt jedoch nur sowas:

p000=Cookies+zulaessig; p101=25%40%40%40lutter%40;

es fehlt nicht nur das Ablaufdatum, auch der Ordner, für den das Cookie hinterlegt ist, z.B. / der Browser kennt diese Werte, also müsen sie vorhanden sein.

Wie komme ich an diese Werte?

Ich möchte den Wert eines Cookies ändern, aber ohne Datum verlischt es bei Ende der Sitzung. Es soll aber der bisherige Lösch-Zeitpunkt erhalten bleiben.

Gruß, Linuchs

  1. Hallo Linuchs,

    hilft https://wiki.selfhtml.org/wiki/JavaScript/Tutorials/cookies?

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. problematische Seite

      Hallo Matthias,

      hilft https://wiki.selfhtml.org/wiki/JavaScript/Tutorials/cookies?

      Wenn ich etwas suche, ist selfhtml selten bei den Ergebnissen auf der ersten Seite. Und wenn, vermisse ich oft die Syntax, die bei Funden auf php.net (fast) immer ganz oben steht.

      Aber mal reingelesen:

      Mit der Abfrage if(document.cookie) ermittelt die Funktion, ob bereits ein Cookie vorhanden ist. Wenn ja, wird dessen Wert ermittelt.

      Falsch, soweit ich das getestet habe. Es wird nicht ein, sondern alle Cookies abgefragt und der Wert eines einzelnen Cookies muss sehr umständlich herausgefiltert werden. Zum Beispiel so:

      function bearbeiteCookie( coo_key ) {
        if ( document.cookie ) {
      alert( document.cookie );
          // Alle Cookies in ein Array und sortieren
          var arr_cookies = document.cookie.split(";");
          arr_cookies.sort();
      
          // Cookie suchen
          for( var i=0; i < arr_cookies.length; i++ ) {
      
            // Cookie-Name von Werten trennen
            arr_cookie = arr_cookies[i].trim().split("=");
      
            // gesuchtes Cookie finden
            if ( arr_cookie[0].trim() == coo_key ) {
      //alert( "[" + arr_cookie[0] + "] [" + arr_cookie[1].replace(/%40/g, "@") + "]" );
              var cookie_value = prompt( "neuer Wert für Cookie [" + arr_cookie[0].trim() + "]:", arr_cookie[1].replace(/%40/g, "@") );
              if ( cookie_value ) {
      
                // neuen Wert setzen fuer oberste Ebene /
                document.cookie = coo_key + "=" + cookie_value + ";path=/";
              }
            }
      …
      

      Die Indexierung document.cookie["p001"] funktioniert gar nicht.

      Ich schlage mich seit Jahren mit dem unerklärten Phänomen herum, dass eine Domain mehrere Cookies mit demselben Namen haben kann. Erst jetzt bin ich dahinter gekommen, wieso. PHP setzt ein Cookie "p001", das sich aufs Hauptverzeichnis / bezieht. Und eine Webseite setzt ebenfalls ein Cookie "p001", das sich auf den Ordner "/_text" dieser Webseite bezieht.

      Wenn ich mit der Webseite im Ordner "/_text" die Cookies aufrufe, sehe ich nur ein einziges "p001", während mir der Browser zwei anzeigt.

      Gruß Linuchs

      1. problematische Seite

        Hallo Linuchs,

        Aber mal reingelesen:

        Mit der Abfrage if(document.cookie) ermittelt die Funktion, ob bereits ein Cookie vorhanden ist. Wenn ja, wird dessen Wert ermittelt.

        Falsch, soweit ich das getestet habe. Es wird nicht ein, sondern alle Cookies abgefragt und der Wert eines einzelnen Cookies muss sehr umständlich herausgefiltert werden. Zum Beispiel so:

        Du hast es leider nicht richtig verstanden. Wahrscheinlich muss es besser formuliert werden.

        Mit der Abfrage if(document.cookie) ermittelt die Funktion, ob bereits ein Cookie vorhanden ist.

        Mit der Abfrage if(document.cookie) ermittelt die Funktion, ob überhaupt Cookies vorhanden sind.

        Wenn ja, wird dessen Wert ermittelt.

        Wenn ja, wird anschließend dessen Wert ermittelt. Der ist ja bekannt, weil dasselbe script diesen setzt ("Zaehler=1;") und es nur diesen einen gibt.

        Die Indexierung document.cookie["p001"] funktioniert gar nicht.

        Natürlich nicht. document.cookie ist eine Folge von name=wert;-Zeichenketten.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
  2. Hallo Linuchs,

    es fehlt nicht nur das Ablaufdatum, auch der Ordner, für den das Cookie hinterlegt ist, z.B. / der Browser kennt diese Werte, also müsen sie vorhanden sein.

    Wie komme ich an diese Werte?

    Mithilfe von JavaScript nicht, es sei denn, du schreibst sie selbst in einen Cookie.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. Hallo Matthias,

      Wie komme ich an diese Werte?

      Mithilfe von JavaScript nicht, es sei denn, du schreibst sie selbst in einen Cookie.

      Danke für den Tipp.

      Gruß Linuchs

  3. Tach!

    ich möchte per JS vorhandene Cookies anzeigen, deren Wert und deren Ablaufdatum. [...] es fehlt nicht nur das Ablaufdatum, auch der Ordner, für den das Cookie hinterlegt ist, z.B. / der Browser kennt diese Werte, also müsen sie vorhanden sein.

    Ja, aber sie sind nicht document.cookie enthalten.

    Wie komme ich an diese Werte?

    Direkt gar nicht, aber eine Suche nach "javascript read cookie expiration date" ergibt durchaus Vorschläge, wie man da rankommt. Ajax-Request an sich selbst absetzen und die Response-Header auswerten.

    Ich möchte den Wert eines Cookies ändern, aber ohne Datum verlischt es bei Ende der Sitzung. Es soll aber der bisherige Lösch-Zeitpunkt erhalten bleiben.

    Muss es unbedingt ein Cookie sein? LocalStorage für rein clientseitige Geschichten gibt es auch noch. Da kann man aber keine Haltbarkeiten setzen, die müsstest du selbst verwalten.

    dedlfix.