• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cache wie 100%ig ausstellen?

StephanBo

Mitglied
Ich möchte, dass eine Bestimmte URI (mein Warenkorb) nicht gecached wird. Im Head-Bereich habe ich in den Meta-Angaben diese drei Meta-Tags eingefügt (sowohl alle drei gleichzeitig probiert, wie auch nur eines von diesen):

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Aktualisiere ich die Seite manuell (F5) habe ich keine Probleme und die dynamischen Inhalte aktualisiert sich, wie sie es sollen. Komme ich jedoch von einer anderen URI auf diese Seite, sind teilweise immer noch die veralteten dynamischen Daten vorhanden und erst durch den manuellen Refresh (F5) erfolgt die Aktualisierung. Das beschriebene Verhalten ist nicht immer so, aber jedes zweite Mal schon.

Was kann ich denn noch tun, um den Cache wirklich 100%ig auszuschalten, so dass auch dynamische Daten immer mit jedem Seitenaufruf aktuell sind?
 
Werbung:
Moin,
ich würde das über die .htaccess machen

Apache-Konfiguration:
<Files warenkorb.php>
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Fri, 11 Nov 1988 05:00:00 GMT"
  </ifModule>
</Files>

MfG
 
Werbung:
Was sagt denn die Developer-Konsole des Browsers? Welchen Statuscode? Welche Header werden gesendet? Eigentlich ist das obere 100%ig.

MfG
 
Hi @StephanBo ,
falls es um externe Scripts / Stylesheets / Embeds geht und dein Provider das anbietet, bzw. du das nutzen willst, kannst du PHP verwenden und an die URL's einen GET-Parameter mit dem aktuellen Zeitstempel hängen - denn dann lädt der Browser aufgrund der veränderten URL die Dateien jedes mal neu vom Server nach. Das geht nach meinen Tests am Zuverlässigsten. Solche Angaben durch META-Tags und .htaccess haben bei mir auch nichts geholfen (in meinem Fall Chrome hat die Anweisung einfach komplett ignoriert), deshalb habe ich es so gemacht. Hier ein Beispiel (Mit Stylesheet und Script):
PHP:
<!doctype html>
<html>
    <head>
        <?php
            $timestamp = time();
            $timesuffix = date("d.m.Y.H.i.s", $timestamp);
        ?>
        <link href="/style.css?t=<?php echo $timesuffix; ?>" rel="stylesheet">
        <script src="/script.js?t=<?php echo $timesuffix; ?>"></script>
    </head>
    <body>
     
    </body>
</html>
Falls du das bei was machen willst, das du dynamisch über JS nachlädst hier ein Beispiel dafür (Für XMLHttpRequest mit JS):
Javascript:
function requestWithTimestamp(){
    a = new Date();
    t = a.getFullYear() + "." + a.getMonth() + "." + a.getDate() + "." + a.getHours() + "." + a.getMinutes() + "." + a.getSeconds();
    //xmlHttpObject und stateChangeHandler wurden bereits vorher festgelegt, bzw. sind hier nicht mit aufgeführt der Übersichtlichkeit wegen
    xmlHttpObject.open('get',"Page.php?t=" + t);
    xmlHttpObject.onreadystatechange = stateChangeHandler;
    xmlHttpObject.send(null);
}
Hoffe, ich konnte dir helfen.
Grüße,
Felixprogram!
 
Zuletzt bearbeitet:
Werbung:
Danke euch beiden für die Hilfe. Es hat wohl eher was mit Chrome zu tun. Im IE und FF klappt es nämlich (meist, aber leider auch nicht immer). Da ich noch nicht wirklich Zeit hatte, den letzten Vorschlag von Felixprogram zu testen, musste ich mich erst einmal anders behelfen und habe einen AJAX-request herausgenommen, der zum beschriebenen Problem geführt hat. Der Prozess im Einzelnen:

Vorher (mit Problem): Man packt ein Produkt in seinen Warenkorb --> via AJAX erhält man eine Nachricht, dass das Produkt hinzugefügt wurde, mit Link zum Warenkorb den man MANUELL betätigen muss --> nutzt man den Link, ist der Warenkorb oft nicht mit dem Produkt aktualisiert.

Jetzt (ohne Problem): Man packt ein Produkt in seinen Warenkorb --> via AJAX erhält man eine Nachricht, dass das Produkt hinzugefügt wurde, man wird AUTOMATISCH nach einer Sekunde mittels "window.location..." zum Warenkorb geleitet --> Warenkorb ist immer richtig !

Mir ist aufgefallen, dass Amazon übrigens auch immer direkt in den Warenkorb weiterleitet. Keine Ahnung ob das aus marketingtechnischer Sicht erfolgt, oder dass selbst Amazon ein solches Problem mit Chrome bemerkt hat? Auch bei vielen anderen Shops (die sicherlich ein Shopsystem nutzen und nicht wie ich ein eigens programmiertes) fällt mir zum Beispiel auf, dass oft das Warenkorbsymol (meist oben rechts zu finden) nicht immer direkt nach dem Hinzufügen aktualisiert wird, sondern erst nach einem Refresh oder wenn man manuell die Seite wechselt.
 
Der Übeltäter ist gefunden. Leider weiß ich aber noch nicht, wie man das Problem behebt ohne die javaScript-Datei nicht zu entfernen.

Nennt sich : jquery.smoothState.js und bewirkt, dass Seiten schneller laden, es aber mitunter zu Problemen mit AJAX-requests kommt.
 
Werbung:
Zurück
Oben