POST nach absenden löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • POST nach absenden löschen

    Moin allerseits,
    ich will verhindern das POST daten durch einen Refresh (F5 - Taste; vor- / zurück Buttons) des Browsers nochmal gesendet werden.
    Hatte das Problem eigentlich schon mal mit folgendem Code gelöst:
    PHP-Code:
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // immer geändert
    header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0"false);
    header("Pragma: no-cache");   // HTTP/1.0
    header("Location:".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].""true302); 
    wollte den Codeschnipsel in ein Script einbauen, bekomme aber das berühmte
    "headers already sent by (output started at /www/htdocs/v166854/testarea/tgrec/inc/functions.inc:35) in "

    Stop Wahsaga
    habe das Beispiel von hier:
    BSP
    dort steht doch auch:
    Der optionale Parameter replace gibt an, ob der Header einen vorhergehenden Header ersetzten soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll. Standardmäßig wird ersetzt. Sie können jedoch als das zweite Argument FALSE übergeben, und so mehrere Header desselben Typs erzwingen.
    deswegen habe ich auch den Code nach:
    PHP-Code:
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"false);    // Datum aus Vergangenheit
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"false); // immer geändert
    header("Cache-Control: no-store, no-cache, must-revalidate"false);  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0"false);
    header("Pragma: no-cache"false);   // HTTP/1.0
    header("Location: ".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].""true302);; 
    geändert - immer noch die gleiche Fehlermeldung.

    War eigentlich auch der Ansicht, das
    PHP-Code:
    header("Location:".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].""true302); 
    zum "bereinigen" von POST ausreichend sein müßte.


    Kann mir einer auf die Sprünge helfen?
    P.S.:
    Bin jetzt 2 Stunden weg, wundert euch also nicht wenn ich nicht gleich auf Antworten reagiere.
    Hasta logo
    "I don't want to belong to any club that would accept me as a member."

    Groucho Marx

  • #2
    Re: POST nach absenden löschen

    Original geschrieben von mcmurphy
    Stop Wahsaga
    Wieso Stop?

    Entweder hast du begriffen, dass du Header vor der ersten Ausgabe auslösen musst - weil durch diese Ausgabe die Header schon gesendet wurden - oder du hast es nicht begriffen.
    BSP
    dort steht doch auch:
    Der optionale Parameter replace gibt an, ob der Header einen vorhergehenden Header ersetzten soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll. [...]
    Die Header sind bereits gesendet worden - welchen Unterschied macht es jetzt deiner Meinung nach ob du eben diese Header, die du jetzt nicht mehr beeinflussen kannst, weil sie längst zum Client unterwegs sind, ersetzen oder weitere hinzufügen willst ...?


    Einigen wir uns also auf
    [X] Du hattest es noch nicht begriffen
    [ ] Du hast es jetzt hoffentlich begriffen
    ...? Fein.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Die Standardmethode ist, nicht auf cash control zu vertrauen, sondern beim Ausgeben des form eine hidden variable zB. value=timestamp ins form einzubauen, und das gleiche beim Ausgeben des Form als Cookie oder als Session Variable zu speichern.

      Beim Verarbeiten des form (action) prüfst du ob das stimmt. Dann änderst Du das cookie oder die Session Variable. Beim nächsten action prüft es wieder und wenn es ein refresh ist,... es stimmt nicht weil Du nochmals den gleichen hidden Wert zurückbekommst, aber das geänderte Cookie, oder die gäendrte session Variable hast.

      Kommentar


      • #4
        Wieso Stop?
        War'n Scherz ; wollte nur verhindern das du bei dem Satz:
        "headers already sent by (output started at /www/htdocs/v166854/testarea/tgrec/inc/functions.inc:35) in "
        direkt einen Wutanfall bekommst

        denn
        Entweder hast du begriffen, dass du Header vor der ersten Ausgabe auslösen musst - weil durch diese Ausgabe die Header schon gesendet wurden - oder du hast es nicht begriffen.
        [X] Du hast es jetzt hoffentlich begriffen (schon vorher)

        aber das Manual sagt doch:

        optionale Parameter replace gibt an, ob der Header einen vorhergehenden Header ersetzten soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll
        deswegen:
        welchen Unterschied macht es jetzt deiner Meinung nach ob du eben diese Header, die du jetzt nicht mehr beeinflussen kannst, weil sie längst zum Client unterwegs sind,
        Unterschied:
        Parameter Replace == true oder false

        Fehler lag übrigens woanders, (ein mieses, kleines Leerzeichen, hätte ich auch selber drauf kommen können )

        @vierteln:
        "I don't want to belong to any club that would accept me as a member."

        Groucho Marx

        Kommentar


        • #5
          Original geschrieben von mcmurphy
          War'n Scherz ; wollte nur verhindern das du bei dem Satz: [...] direkt einen Wutanfall bekommst
          Ein solcher wäre aber doch fast gerechtfertigt gewesen - denn du hattest ja offenbar immer noch nicht verstanden, was es damit auf sich hat.
          aber das Manual sagt doch:
          Du kannst aber nichts mehr "ersetzen", was schon längst nicht mehr "da" ist.

          Durch die erste Ausgabe wurden die Header bereits auf die Reise geschickt, sind weg, nicht mehr erreichbar für dein Script - also kannst du sie weder ersetzen, noch neue hinzufügen.

          [ ] Du hast es jetzt hoffentlich begriffen
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Das Ersetzen findet vor dem Absenden statt. Es macht also nur den Unterschied, ob eine Header-Information mehrmals geschickt wird. Ein bereits abgeschickter Header kann trotzdem nicht ersetzt oder verändert werden...

            Kommentar


            • #7
              [x] Du hast es jetzt hoffentlich begriffen
              (Hoffentlich )
              Aber das eigentliche Thema ist ja:
              "Wie verhindere ich das bei einem Refresh einer Seite die Formulardaten nochmal gesendet werden..."
              "I don't want to belong to any club that would accept me as a member."

              Groucho Marx

              Kommentar


              • #8
                Original geschrieben von mcmurphy
                Aber das eigentliche Thema ist ja:
                "Wie verhindere ich das bei einem Refresh einer Seite die Formulardaten nochmal gesendet werden..."
                Na dazu hat vierteln dir ja schon einen guten Hinweis gegeben ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  sorry, muß heißen:
                  Aber das eigentliche Thema war ja:
                  "Wie verhindere ich das...

                  "I don't want to belong to any club that would accept me as a member."

                  Groucho Marx

                  Kommentar

                  Lädt...
                  X