Andy: Cache umgehen bzw Cachen verhindern

Hallo

In meinem Projekt verfolge ich streng die Linie, PHP von HTML, HTML von CSS und HTML von JS zu trennen. Momentan geht es mir aber um das Zusammenspiel PHP<=>HTML.

So ist dann immer die Vorgehensweise:
PHP-Code wird ausgeführt; die Teile, die ich nachher ausgegeben haben will (bspw eine Liste), werden in Variabeln/Arrays gespeichert.
Dann wird mittels include das Template, bspw "t_index.html", inkludiert.
In der t_index.html steht dann der HTML-Code mit den PHP-Bruchstücken an den Stellen dazwischen, wo ich den Variablen-Inhalt ausgeben will.

Mein Problem:
In einem Einloggskript wird das Template t_login.html inkludiert. Diese hat folgende Code-Zeilen:

if($_COOKIE['loggedin']=="true")
  {
  ?>
  <br><div id="logindiv_mark"><?="Daten ok, ich logg dich ein...";?></div><br>
  <?php
  }
  ?>

Direkt darunter folgt das Einlogg-Formular.

t_login.html wird von login.php inkludiert. login.php wird von index.php inkludiert, wenn das Cookie "loggedin" nicht gesetzt wurde. Also nur, wenn man sich noch nicht eingeloggt hat.

ABER login.php (und damit auch t_login.html) wird auch von logmein.php inkludiert. logmein.php ist das Skript, das anspringt wenn auf den Submit-Button im Einloggformular geklickt wurde. Dieses Skript setzt auch das Cookie "loggedin", wenn die Daten richtig eingegeben wurden.

Da logischerweise login.php beim Erstaufruf der Seite zum ersten mal inkludiert wird, behält sie PHP im Cache.
Nach dem fehlerlosen Ausfüllen des Einlogg-Formulars wird aber login.php nochmals inkludiert. Die Abfrage oben, ob das Cookie "loggedin" gesetzt wurde, entfällt, da PHP die login.php noch aus dem Cache nimmt.

Und genau das will ich verhindern, also dass die Seite t_login.html von PHP gecached wird bzw dass die Seite aus dem Cache genommen wird. Wie ich verhindere, dass der Browser die Seite cached, weiß ich inzwischen, aber anscheinend kann ein Skript nicht einfach eine Servererweiterung dazu überreden, seine Seite als Ausnahme zu behandeln...
Ich vermute blind, dass aus diesem Grund auch kein Leeren des PHP-Caches durch PHP-Skript, sondern nur durch Server- bzw PHP-Neustart möglich ist.

Gibt es da trotzdem eine Möglichkeit oder muss ich mir ein anderes Konzept, etwa ein zweites Template, überlegen?

MfG
Andy

  1. hi,

    Momentan geht es mir aber um das Zusammenspiel PHP<=>HTML.

    Nein, eigentlich geht es um HTTP.

    Da logischerweise login.php beim Erstaufruf der Seite zum ersten mal inkludiert wird, behält sie PHP im Cache.

    Nicht PHP cashed, sondern der Client.
    (Es sei denn, du redest von irgendeiner Art serverseitigem Script-Ausgabe-Cache - aber davon war ja keine Rede. Oder?)

    Ich vermute blind, dass aus diesem Grund auch kein Leeren des PHP-Caches durch PHP-Skript,

    Der Client cached, nicht PHP.

    Gibt es da trotzdem eine Möglichkeit oder muss ich mir ein anderes Konzept, etwa ein zweites Template, überlegen?

    Schau dir die Manual-Seite zu header an, um dich zu informieren, welche Möglichkeiten du von PHP aus hast, dem Client vorzuschlagen, dass er Caching für bestimmte Ressourcen doch bitte unterlassen möge.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }