2009-12-15 9 views
14

Mam stronę, index.php, która pokazuje informacje na podstawie mysql db. Są na niej formularze, a akcja dla formularzy jest ustawiona na osobnej stronie o nazwie process.php. Process.php nie wszystkie CRUD rzeczy bazy danych, a następnie wykorzystujeJak zmusić stronę, aby nie była buforowana w PHP?

header("Location: /webadmin/email/index.php"); 

wysłać użytkownikowi powrót do oryginalnej strony.

Wydaje się, że działa dobrze, z wyjątkiem faktu, że oryginalna strona indeksu nie zawsze odzwierciedla zmiany wprowadzone przez process.php. Zakładam, że strona jest buforowana, ponieważ jeśli wykonuję odświeżenie (Ctrl + F5), strona wyświetli najnowsze dane.

Jak mogę zapobiec buforowaniu tej strony? Próbowałem what the PHP page for header() says, ale nie wydaje się działać. Opcje Cache-Control i Expires wydają się nie mieć żadnego efektu - strona jest nadal buforowana.

Aktualizacja

Ok, byłem częściowo błędne. Widocznie dodaje działa w IE:

<?php header("Cache-Control: no-cache, must-revalidate"); 

Jednak na pewno nie działa w FF, który jest nadal pokazano wersję pamięci podręcznej. Jakieś pomysły na to, dlaczego tak się dzieje i jak mogę to zatrzymać?

+2

Zła wiadomość: http://blogs.imeta.co.uk/JDeabill/ archiwum/2008/07/14/303.aspx – danii

+0

To najwyraźniej zostało naprawione, ale założę się, że jest kilka wersji, które mają takie zachowanie. –

+0

Używam najnowszej wersji FF i nadal widzę to zachowanie, chyba że dołączę fałszywą kwerendę do końca adresu URL. – croceldon

Odpowiedz

13

Bądź wszystko przeglądarek wchodzą w linii:

header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999)); 

To nie jest ładna, ale pasuje na zadane pytanie: „Jak siła .. . "

+0

To wydaje się działać dobrze - każde ciało ma jakieś pomysły, które byłyby "ładne"? – croceldon

8
<?php header("Cache-Control: no-cache, must-revalidate"); 
+0

OK - to wydaje się działać w IE, ale zdecydowanie NIE działa w FF. Jakieś pomysły, dlaczego? – croceldon

0

Spróbuj oszukiwanie przeglądarkę z pozornej kwerendy:

header("Location: /webadmin/email/index.php?x=1"); 
+3

Nagłówek Cache-Control to właściwy sposób. –

+0

Tak, to tylko sztuczka, która czasami może się przydać, ale nie w tym przypadku;) – Strae

+0

"Prawidłowe" nie zawsze jest praktyczne. – graphicdivine

38

chciałbym grać bezpiecznie i starać się wszystkie wyjścia zabójców cache znanych człowiekowi (i przeglądarki). Moja lista składa się obecnie z:

<?php 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); // HTTP/1.0 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 
+0

Czy znasz kolejność pierwszeństwa tych różnych nagłówków? Jestem pewien, że różni się w zależności od przeglądarki, ale przydałoby się wiedzieć przynajmniej o IE i FF. –

+11

zabić, spalić, rzucić popioły na słońce w zamkniętej kapsule –

+1

Po prostu wypróbowałem wszystkie powyższe, ale nadal wydaje się buforowanie strony. – croceldon

14

To jest odpowiednia kolejność, aby działało poprawnie we wszystkich przeglądarkach:

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
header("Pragma: no-cache"); // HTTP/1.0 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
?> 
0
<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

to zrobić i to powinny zapobiec buforowania we wszystkich przeglądarkach

przetestowany w IE i FF chrom

Powiązane problemy