tobi85: PHP Cookie erst nach Reload

Hallo Zusammen,

ich habe ein Skript für einen Warenkorb, welches das Cookie vom aktuellen Warenkorb speichert. Problem ist, wenn ich nun zum Beispiel die Menge vom Artikel im Warenkorb ändern möchte, wird also zuerst das Cookie geändert und dann soll wieder der "neue" Warenkorb geladen werden. Problem ist, dass noch der "alte" Warenkorn angezeigt wird - erst, nachdem ich die Seite neu geladen habe, wird der neuen Warenkorb angezeigt. An was liegt das?

  1. Tach!

    Problem ist, dass noch der "alte" Warenkorn angezeigt wird - erst, nachdem ich die Seite neu geladen habe, wird der neuen Warenkorb angezeigt. An was liegt das?

    Am Ablauf deiner Anwendung oder dem falschen Verständnis vom Ablauf im Web. Das kann ich nur vermuten, weil die Problembeschreibung unzureichend ist, um zu erkennen, was da wie und wo läuft und angezeigt wird.

    dedlfix.

  2. Hallo

    ich habe ein Skript für einen Warenkorb, welches das Cookie vom aktuellen Warenkorb speichert. Problem ist, wenn ich nun zum Beispiel die Menge vom Artikel im Warenkorb ändern möchte, wird also zuerst das Cookie geändert und dann soll wieder der "neue" Warenkorb geladen werden. Problem ist, dass noch der "alte" Warenkorn angezeigt wird - erst, nachdem ich die Seite neu geladen habe, wird der neuen Warenkorb angezeigt. An was liegt das?

    Das liegt an der Arbeitsweise von Cookies. Wenn du z.B. mit deinem PHP-Script ein Cookie setzt und an den Browser sendest, wird es im Browser gespeichert, steht aber dem Skript selbst in diesem Aufruf nicht zur Verfügung. Im Array $_COOKIE werden Werte gespeichert, die vom Browser bei einem Request mitgesendet wurden, was in diesem Moment aber nicht der Fall war. Entweder du findest in $_COOKIE keine Werte, weil es beim Request noch keines gab oder die Werte des alten, erst während der Ausführung des Skripts geänderten Cookies.

    Benutze, wenn nötig, die Werte, die du im Cookie speicherst, direkt. Welche das sind und wann du diese statt der Cookie-Werte nutzen musst, solltest du als programmierer des Skripts ja wissen.

    Tschö, Auge

    --
    Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
    Wolfgang Schneidewind *prust*
  3. Hallo Zusammen,

    ich habe ein Skript für einen Warenkorb, welches das Cookie vom aktuellen Warenkorb speichert. Problem ist, wenn ich nun zum Beispiel die Menge vom Artikel im Warenkorb ändern möchte, wird also zuerst das Cookie geändert und dann soll wieder der "neue" Warenkorb geladen werden. Problem ist, dass noch der "alte" Warenkorn angezeigt wird - erst, nachdem ich die Seite neu geladen habe, wird der neuen Warenkorb angezeigt. An was liegt das?

    An Deinem unzulänglichen Konzept, den Warenkorb in einem Cookie zu speichern.

    1. Also mal ehrlich, welcher Depp gibt denn hier ein -- in der Bewertung!? Viel hat der nicht drauf ;)

      1. Hallo pl,

        Also mal ehrlich, welcher Depp gibt denn hier ein -- in der Bewertung!? Viel hat der nicht drauf ;)

        Ich war's zwar nicht, sehe aber dass deine Aussage, unabhängig davon, ob sie wahr oder falsch ist, oder man ihr überhaupt einen Wahrheitswert zuordnen kann, dem OP in keiner Weise hilft.

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        1. Hallo,

          Ich war's zwar nicht,

          ich auch nicht, hatte aber überlegt es zu tun.

          sehe aber dass deine Aussage, unabhängig davon, ob sie wahr oder falsch ist, oder man ihr überhaupt einen Wahrheitswert zuordnen kann,

          Sie ist sogar so schwammig, dass man ihr getrost beide Werte zuordnen kann!

          Gruß
          Kalk

          1. @@Tabellenkalk

            sehe aber dass deine Aussage, unabhängig davon, ob sie wahr oder falsch ist, oder man ihr überhaupt einen Wahrheitswert zuordnen kann,

            Sie ist sogar so schwammig, dass man ihr getrost beide Werte zuordnen kann!

            Gödel hätte seine Freude dran. Und Heisenberg auch.

            LLAP 🖖

            --
            “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
            Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
            1. Hallo,

              Gödel hätte seine Freude dran. Und Heisenberg auch.

              Und dann noch Schrödinger samt seinem Haustier.

              Gruß
              Kalk

              1. @@Tabellenkalk

                Gödel hätte seine Freude dran. Und Heisenberg auch.

                Und dann noch Schrödinger samt seinem Haustier.

                *hüstel* Den hatte ich eigentlich im Sinn. Wie kam ich denn auf Heisenberg? Obwohl der – Glück für mich – auch nicht falsch in der Reihe ist.

                LLAP 🖖

                --
                “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
                Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
                1. Hallo,

                  Gödel hätte seine Freude dran. Und Heisenberg auch.

                  Und dann noch Schrödinger samt seinem Haustier.

                  *hüstel* Den hatte ich eigentlich im Sinn. Wie kam ich denn auf Heisenberg?

                  vermutlich, weil der sich auch gern um eine exakte Aussage drückte.

                  Obwohl der – Glück für mich – auch nicht falsch in der Reihe ist.

                  Gerade nochmal die Kurve gekriegt. ;-)

                  So long,
                   Martin

                  --
                  Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
                  - Douglas Adams, The Hitchhiker's Guide To The Galaxy
      2. Hallo pl,

        Also mal ehrlich, welcher Depp gibt denn hier ein -- in der Bewertung!? Viel hat der nicht drauf ;)

        einfach mal an die eigene Nase fassen.

        Session-Daten in einem Cookie zu speichern ist eine weit verbreitete Methode (einige Frameworks nutzen das z.B.) und hat durchaus seinen Sinn: man muss z.B. keinen zusätzlichen I/O-Zugriff machen um die Daten zu laden.

        LG,
        CK

        1. Session-Daten in einem Cookie zu speichern ist eine weit verbreitete Methode (einige Frameworks nutzen das z.B.) und hat durchaus seinen Sinn: man muss z.B. keinen zusätzlichen I/O-Zugriff machen um die Daten zu laden.

          So lange der Useragent (Browser) dem Server glaubt und nicht der Server den Useragent sehe ich auch kein Problem... andersherum ist es wohl eine Entwicklung der Firma InfiniTumb.

          1. Hallo Nachfrager,

            So lange der Useragent (Browser) dem Server glaubt und nicht der Server den Useragent sehe ich auch kein Problem... andersherum ist es wohl eine Entwicklung der Firma InfiniTumb.

            Wenn Sessions in Cookies abgelegt werden, ist die übliche Vorgehensweise den Cookie zu verschlüsseln und zu signieren, so dass er Client-seitig nicht verändert werden kann. Hab ich aber glaub ich auch schon ein paar mal erwähnt ;-)

            LG,
            CK

  4. wird also zuerst das Cookie geändert und dann soll wieder der "neue" Warenkorb geladen werden.

    Die Quintessenz der Rückfragen ist: (Wie und ergo: Wo) setzt Du Du das Cookie? Dieses hier geht nämlich sehr wohl:

    <!doctype html>
    <html>
      <body>
        <h1>Cookie</h1>
        <pre id="cookieOut"></pre>
        <button onclick="document.cookie='foo=tok';writeCookie();">neues Cookie</button>
        <script>
          document.cookie="foo=bar";
          function writeCookie() {
            document.getElementById('cookieOut').innerHTML=document.cookie;
          }
        writeCookie();
      </script>
    <body>
    
    1. Hallo

      wird also zuerst das Cookie geändert und dann soll wieder der "neue" Warenkorb geladen werden.

      Die Quintessenz der Rückfragen ist: (Wie und ergo: Wo) setzt Du Du das Cookie?

      Ist das einzig verwendete Tag nicht aussagekräftig genug?

      Dieses hier geht nämlich sehr wohl: [Cookie mit JS setzen]

      Ja. Es ist aber auch von der Verfügbarkeit von JavaScript abhängig. Für ein serverseitig gesetztes Cookie besteht nur die Abhängigkeit, dass Cookies überhaupt angenommen werden. Das ist eine Abhängigkeit weniger als bei der JS-Lösung und ist daher zu bevorzugen.

      Tschö, Auge

      --
      Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
      Wolfgang Schneidewind *prust*
      1. Hi,

        Für ein serverseitig gesetztes Cookie besteht nur die Abhängigkeit, dass Cookies überhaupt angenommen werden.

        und dass sie beim nächsten Request auch wieder mitgesendet werden!

        Das erscheint vielleicht spitzfindig, aber beispielsweise ein vom Arbeitgeber vorgeschalteter Zwangs-Proxy könnte beide Richtungen (Request und Response) unabhängig voneinander "behandeln". Ob das sinnvoll ist, sei dahingestellt.

        Absichtlich kann man sowas natürlich auch tun. Tools wie etwa Proxomitron (wird leider schon lange nicht mehr gepflegt) können das. So könnte man zwar alle Cookies annehmen, um mal zu erforschen, was der Server da so alles liefert, gleichzeitig aber nichts zurücksenden und so den Eindruck erwecken, man würde keine Cookies annehmen. Ich weiß von nichts ...

        Das ist eine Abhängigkeit weniger als bei der JS-Lösung und ist daher zu bevorzugen.

        Da stimme ich zu.

        So long,
         Martin

        --
        Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
        - Douglas Adams, The Hitchhiker's Guide To The Galaxy
      2. Ist das einzig verwendete Tag nicht aussagekräftig genug?

        So ist es. Es ist nicht aussagekräftig genug weil ich z.B. nicht weiß wie denn die Anzeige des Warenkorbs erfolgt. Der TO hat ein Problem, das hat er, weil er was falsch macht. Wenn er aber etwas falsch macht, dann weiß ich nicht ob er sein Vorgehen auch richtig beschreibt. Denn wenn er sein Vorgehen richtig beschreibt, dann würde er wohl die Ursache des Fehlers kennen und müsste nicht fragen.

        Ja. Es ist aber auch von der Verfügbarkeit von JavaScript abhängig.

        He. Ich habe nicht geschrieben, dass er es so machen soll. Es handelt sich augenscheinlich um ein Beispiel welches zeigt, dass Cookie setzen und dann das neue Cookie lesen sehr wohl geht.

        1. Hallo

          Ist das einzig verwendete Tag nicht aussagekräftig genug?

          So ist es. Es ist nicht aussagekräftig genug weil ich z.B. nicht weiß wie denn die Anzeige des Warenkorbs erfolgt. Der TO hat ein Problem, das hat er, weil er was falsch macht. Wenn er aber etwas falsch macht, dann weiß ich nicht ob er sein Vorgehen auch richtig beschreibt.

          Soweit, so nachvollziehbar.

          Denn wenn er sein Vorgehen richtig beschreibt, dann würde er wohl die Ursache des Fehlers kennen und müsste nicht fragen.

          Man kann sehr wohl ein Phänomen aus der Beobachtung korrekt beschreiben, ohne dessen Ursache zu kennen. Aber ja, oft ist das nicht der Fall. Die vom OP gelieferte Beschreibung seiner Beobachtung halte ich aber für hinreichend schlüssig, um auf das fehlende Verständnis der Reihenfolge der Ereignisse zu tippen, auf die ich ja schon eingegangen war [1]. Die Frage, ob ich mit meiner Vermutung richtig liege, kann nur der OP beantworten. Es wäre schön, wenn er sich dazu äußern würde.

          Tschö, Auge

          --
          Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
          Wolfgang Schneidewind *prust*

          1. Es ist ja nicht so, dass es nicht auch sein Gutes hat, selbst in eine solche Falle gerannt zu sein. :-) ↩︎

        2. @@Nachfrager

          Wenn er aber etwas falsch macht, dann weiß ich nicht ob er sein Vorgehen auch richtig beschreibt. Denn wenn er sein Vorgehen richtig beschreibt, dann würde er wohl die Ursache des Fehlers kennen und müsste nicht fragen.

          “Whoever best describes the problem is the person most likely to solve the problem.” —Dan Roam

          (gefunden in ChrisBs Signatur, irgendwann)

          LLAP 🖖

          --
          “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
    2. In so'ner Firma hab ich auch mal gearbeitet: Cookie mit JavaScript setzen und dann ein force Reload. Seiten mit 30..50 Cookies waren keine Seltenheit bei diesem Programmierstil ;)

      Und ganz Schlaue speichern den Warenkorb in einem Cookie, am besten so dass Kunde die Preise selber ändern kann ;)

      Mann bin ich froh, dass ich Rentner bin.

      1. Hallo pl,

        Mann bin ich froh, dass ich Rentner bin.

        Ich auch.

        LG,
        CK

      2. Und ganz Schlaue speichern den Warenkorb in einem Cookie, am besten so dass Kunde die Preise selber ändern kann ;)

        Ja. Sowas hab ich auch mal gesehen. Auch dass der per Cookie gesendete Warenkorb mitsamst den Preisen einfach übernommen wurde. Sogar Artikel 999999999 "Rücküberweisung für Gutschrift", Anzahl: 1, Betrag -1 Mio. ging zumindest shopseitig erstmal durch.

        1. Hallo Nachfrager,

          Ja. Sowas hab ich auch mal gesehen. Auch dass der per Cookie gesendete Warenkorb mitsamst den Preisen einfach übernommen wurde. Sogar Artikel 999999999 "Rücküberweisung für Gutschrift", Anzahl: 1, Betrag -1 Mio. ging zumindest shopseitig erstmal durch.

          Session-Cookies sollten selbstverständlich verschlüsselt und signiert sein.

          LG,
          CK