Jose Ortega: Caching und Opera

Hallo Leute!

Ich arbeite gerade an einer PHP-Seite und möchte verhindern, dass nach dem Absenden eines Formulars beim Drücken des Back-Buttons die Seite aus dem Cache (inkl. ausgefüllter Felder) wieder aufscheint.

Folgender Code funktioniert mit IE und NS, Opera zeigt sich jedoch völlig unbeeindruckt:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");

Jetzt habe ich es mit Meta-Tags probiert:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

Doch Opera lädt die Seite immer wieder aus dem Cache. Ich weiss nicht mehr weiter... Hat irgend jemand noch eine Idee? Wie kann ich Opera dazu bringen, beim Drücken der Back-Taste die Seite neu zu laden und nicht aus dem Cache zu holen???

Ich habe mit Opera 6.0 und PHP 4.1.0 getestet...

In der Hoffnung auf zahlreiche Vorschläge

Jose

  1. Doch Opera lädt die Seite immer wieder aus dem Cache. Ich weiss nicht mehr weiter... Hat irgend jemand noch eine Idee? Wie kann ich Opera dazu bringen, beim Drücken der Back-Taste die Seite neu zu laden und nicht aus dem Cache zu holen???

    Kann sein, daß das ein Feature ist. Ich hab so das Gefühl, als ob Opera die Daten des Formulars retten möchte (da es bis Version 5.12 teilweise vorkam, daß die Daten nicht abgeschickt wurden, war "Back" der einzige Weg, nochmal an die Daten zu kommen).

    Wenn du verhindern willst, daß Daten doppelt abgeschickt werden, mußt du das entweder auf dem Server kontrollieren (stecke eine zufällig generierte, aber (hoffentlich) eindeutige Zahl in ein hidden-Feld und lasse jede Zahl nur einmal zu), oder du versuchst, mit Javascript "onload" das Formular zu leeren.

    - Sven Rautenberg

    1. Hallo Sven!

      Danke für Deine Antworten. Ich habe mittlerweile schon gemerkt, dass der Ansatz mit dem No-caching bei Opera nicht zum Ziel führt und habe jetzt das Ganze mit Cookies gelöst. Trotzdem nochmals Danke!

      Jose

  2. Folgender Code funktioniert mit IE und NS, Opera zeigt sich jedoch völlig unbeeindruckt:

    Lesen bildet...

    Wie man auf http://www.php.net zum Befehl "header" nachlesen kann, ist der History-Mechanismus eines Browsers laut RFC 2616 dafür gedacht, die Seiten so anzuzeigen, wie der User sie damals sah.

    Alle Browser bis auf Opera ignorieren aber diese RFC 2616. Insofern ist es tatsächlich ein Feature, und kein Bug, wie ich ja schon in meinem ersten Posting sagte.

    Hier die Nachricht im Original:
    ---schnipp---
    RFC 2616 section 13.13:
    (...) History mechanisms and caches are different. In particular history mechanisms SHOULD NOT try to show a semantically transparent view of the current state of a resource. Rather, a history mechanism is meant to show exactly what the user saw at the time when the resource was retrieved. (...)

    All browsers but Opera ignore this. This means Opera _always_ uses cached
    pages when using back, forward buttons. No matter what headers you send.

    http://www.opera.com/support/supsearch/supsearch.cgi?options=index&name=594
    ---schnapp---

    - Sven Rautenberg