Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Cache-Control [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Cache-Control


 
lebkuchenmann
22-07-2007, 12:07 
 
Moin.
So um gleich zur Sache zu kommen, mein Problem liegt beim Cache'n.

Zur Zeit benutze ich folgendes, um die Seite zu Cache'n
header("Cache-Control: public, max-age=" . 30 * 60);
(Der Code liefert das erfreuliche Ergebnis, dass wenn ein Nutzer auf "Zurück" klickt die vorherige Seite nicht nochmal geparst/neu geladen wird)

Die Sache ist nun die, dass jetzt aber bei allen Seiten, auf denen der Nutzer schon einmal war, der "Inhalt" vom letzten Aufruf angezeigt wird.
Wie kann ich es am besten lösen das beim "Zurück" springen des Nutzers die Seite nicht neu geladen wird, jedoch aber bei allen anderen Operationen?

Mfg

 
TobiaZ
22-07-2007, 12:21 
 
Hmm, du musst dich schon entscheiden. Entweder wird die Seite für die Zeit x gespeichert, oder nicht.

Aber ich wette, du willst etwas ganz bestimmtes damit bezwecken, plaudere mal ein bisschen aus dem Nähkästchen, sicher gibt es ne bessere Lösung...

 
lebkuchenmann
22-07-2007, 12:25 
 
Vorab, ich Programmiere Just for Fun. ;)
Okay, was ich erreichen will ist, dass eine Seite jedes mal "neu" geparst wird (weil dynamische Inhalte vorhanden sind), jedoch nicht, wenn ein Nutzer die "Zurück"-Option (oder ähnliches) verwendet.

 
TobiaZ
22-07-2007, 12:26 
 
Und was unterscheided den HTTP-Request eines "zurück" von dem eines normalen Links, o.ä.?

 
lebkuchenmann
22-07-2007, 12:29 
 
Ich weiß nicht :D
Was ich halt erreichen will, ist einfach das die Seite nicht nocheinmal geladen wird, wenn ein Nutzer auf zurück klickt.

 
TobiaZ
22-07-2007, 13:06 
 
Es gibt auch keinen Unterschied.

Liegt also afaik im Ermessen des Browsers, bzw. an seinen Einstellungen ob er die Seite bei "zurück" neu läd, oder aber eine Seite aus dem Cache nimmt.

Du kannst zwar das Cache-Verhalten beeinflussen. Jedoch nicht seperat.

 
goldi
22-07-2007, 20:00 
 
Eine Möglichkeit wäre die Verwendung des If-Modified-Since-Headers, der von den Standardbrowsern, aber auch z.B. vom Googlebot unterstützt wird und dabei hilft, den Traffic zu reduzieren.

Die folgende Beispielfunktion klärt mit dem Client ab, ob er bereits die aktuelle Seitenversion besitzt. Ist dies der Fall, wird die Ausgabe abgebrochen und der Client zeigt die gecachte Seite an. Die Funktion muss vor der Seitenausgabe aufgerufen werden, da Header gesendet werden.


// Erzeugen von Last-Modified und ETag-Headern
function conditional_get ($timestamp)
{
$last_modified = gmdate("D, d M Y H:i:s", $timestamp).' GMT';
$etag = md5($last_modified);
header('Last-Modified: '.$last_modified);
header('ETag: "'.$etag.'"');
$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) :
false;
if (!$if_modified_since && !$if_none_match) return;
if ($if_none_match && $if_none_match != $etag) return;
if ($if_modified_since && $if_modified_since != $last_modified) return;
header('HTTP/1.1 304 Not Modified');
ob_end_clean();
exit;
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:47 Uhr.