Zurücknavigieren per Browserbutton verhindern

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

  • Zurücknavigieren per Browserbutton verhindern

    Hallo,

    Folgende Situation:
    Ein Formular wird per Submit gepostet und verarbeitet.
    Danach sieht der Anwender einen Bestätigungsdialog.
    Nun soll verhindert werden, dass, wenn der Benutzer den Zurückbutton des Browsers anklickt, der Verarbeitungsprozess der POST-Daten erneut abläuft.
    Doppelter Redirect funktioniert nicht, da der Browser die Seiten nicht im Verlauf speichert. Man kann sogar beliebig oft redirecten, es macht keinen Unterschied. Egal, ob per Header oder location.href.

    Redirect geht so:
    POST->Redirect->Bestätigung

    Wenn man nun von der Bestätigung zurückgeht, sollte man auf der Redirect-Seite landen und von dort wieder zur Bestätigung geleitet werden. Der Browser, egal ob Firefox oder IE, geht aber von der Bestätigung direkt wieder zur POST-Seite.

    Zweiter Ansatz war, eine SESSION zu benutzen, die vor dem erneuten Posten der Daten, überprüft wird und die WeiterleitungsURL beinhaltet. Ging auch nicht, OLOL.

    Wisst ihr Rat?
    PHP-Code:
    function verrecke_elend()
    {
        die(
    'Aaargh!');


  • #2
    das "zurück-klicken" kannst du natürlich nicht verhindern.

    Zweiter Ansatz war, eine SESSION zu benutzen, die vor dem erneuten Posten der Daten, überprüft wird und die WeiterleitungsURL beinhaltet.
    eine hervorragende idee. was ist an ihr nicht ok?

    Kommentar


    • #3
      Original geschrieben von penizillin
      das "zurück-klicken" kannst du natürlich nicht verhindern.
      Das ist klar.

      Original geschrieben von penizillin
      eine hervorragende idee. was ist an ihr nicht ok?
      Das ist ja das Ding. Der Server stellt fest, dass der User wieder auf die vorige URL zurückgegangen ist. Also sende ich einen Header(Location:...). Der Browser navigiert zu der angegebenen Seite (also zu der, die ich erzwingen will), merkt sich die vorhergehende (die, auf der ich den Header gesendet habe) aber nicht im Verlauf. Er ist also intern tatsächlich zurückgegangen. Der nächste Klick auf den Zurückbutton sendet den User noch einen Schritt zurück. Er ist dann also schon zwei Seiten von der Bestätigung entfernt.
      So trivial die Lösung mit der Session erscheint, man muss das erlebt haben, um es zu verstehen.
      PHP-Code:
      function verrecke_elend()
      {
          die(
      'Aaargh!');

      Kommentar


      • #4
        Der nächste Klick auf den Zurückbutton sendet den User noch einen Schritt zurück. Er ist dann also schon zwei Seiten von der Bestätigung entfernt.
        und? wenn der benutzer da nicht hin will, dann will er da nicht hin. biete eine eigene vernünftige navigation durch das formular ("schritt vor"/"schritt zurück") an - wer sie nicht benutzen möchte ist selbst schuld, wenn er mit der browser navigation durcheinander kommt.

        was ich dir allerdings empfehlen kann: baue dein skript so auf, dass die post-daten niemals doppelt abgeschickt werden können, außer der user klickt zwei mal auf "submit" - das bedeutet, die verarbeitung (post-daten empfangen) erfolgt immer in zwischen-dateien, die keine ausgabe produzieren und somit nicht in die browser-history kommen. dann kann der user mit browsernavigation "vor" und "zurück" durch dein formular gehen, ohne dass etwas doppelt abgeschickt wird.

        Kommentar


        • #5
          Thx, peniz, darauf hätte ich kommen sollen. Ist ja in Foren auch so.
          PHP-Code:
          function verrecke_elend()
          {
              die(
          'Aaargh!');

          Kommentar

          Lädt...
          X