Rolf B: Dokument erloschen Problem

Beitrag lesen

Hallo Martin,

nein nein, die INI Angabe hat den Punkt und die PHP Funktion, die die Ini-Angabe überschreiben kann, hat den Unterstrich. Das ist schon richtig.

Mir ist das Problem allerdings ebenfalls unbekannt. Das kann daran liegen, dass ich dauerverchromt bin und Füchse aus Tierschutzgründen vom Feuer fernhalte.

Aber in Chrome ist das Problem als "ERR_CACHE_MISS" bekannt.

Grundsätzlich ist das ja eine gute Sache - man WILL nicht, dass der User ein Formular ausfüllt, es POSTet, dann "ZURÜCK" drückt und das Formular nochmal gepostet wird. Das ist der Hintergrund, warum es diese Meldung gibt.

Mit ini_set("session.cache_limiter", "private") bzw. session_cache_limiter("private") - beides das Gleiche - verhindert man das Neuposten, aber eben auch um den Preis, dass man die Daten sieht, die vor dem Post gültig waren. Weil man den Cache-Inhalt des Browsers sieht. Und das möchte man bei einer Formularanwendung eigentlich auch nicht.

Deswegen programmieren viele das PRG Pattern (Post-Redirect-Get), d.h. wenn man im PHP einen POST verarbeitet, gibt man die Ergebnisseite nicht direkt aus, sondern erzeugt einen Redirect, so dass die neuen Daten per GET abgeholt werden.

Ablauf ohne PRG - am Beispiel eines Wizard-Dialogs mit mehreren Seiten

  • User lädt theWizard.php

  • GET von theWizard.php -> Erste Formularseite anzeigen

  • User füllt Seite 1 aus

  • POST von theWizard.php mit Daten von Seite 1 -> Daten für Seite 1 senden, zweite Formularseite anzeigen

  • User füllt Seite 2 aus

  • POST von theWizard.php mit Daten von Seite 2 -> Daten für Seite 2 senden, dritte Formularseite anzeigen

Problemmöglichkeit 1: User merkt, dass er einen Fehler gemacht hat, und klickt "Zurück".

  • POST von theWizard.php mit Daten von Seite 1

Problemmöglichkeit 2: Die Seite lädt langsam, der User wird ungeduldig und drückt F5

  • POST von theWizard.php mit Daten von Seite 2

Beides ist unerwünscht und kann - je nach Programmlogik - zu Mehrfachbuchungen oder Datenkorruption führen. Deswegen sagt Dir der Browser: TU DAS NICHT UNBEDACHT

Verwendet man das PRG Pattern, wird nach jedem Post ein GET gemacht. Drückt man dann F5, wird der GET wiederholt. Zumindest in Chrome ist es so, dass der ZURÜCK-Button nicht auf Seiten mit Status 302 springt, sondern nur auf die 200er Seiten

Tatsächlich bin ich nicht wirklich sicher, ob cache_limiter=private eine gute oder schlechte Sache ist. Daten von vor einem POST im Browser zu cachen ist etwas, das man sich gut überlegen sollte.

Rolf

--
sumpsi - posui - obstruxi