2009-12-15 11 views
14

Ho una pagina, index.php, che mostra informazioni basate su un mysql db. Ci sono forme su di esso e l'azione per le forme è impostata su una pagina separata chiamata process.php. Process.php fa tutto il materiale CRUD del database, quindi usaCome forzare la pagina a non essere memorizzata nella cache in PHP?

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

per inviare l'utente alla pagina originale.

Sembra funzionare correttamente, tranne il fatto che la pagina indice originale non riflette sempre le modifiche apportate da process.php. Presumo che la pagina sia in cache, perché se faccio un aggiornamento (Ctrl + F5), la pagina mostrerà i dati più recenti.

Come posso evitare che la pagina venga memorizzata nella cache? Ho provato what the PHP page for header() says, ma non sembra funzionare. Le opzioni Cache-Control and Expires sembrano non avere alcun effetto - la pagina è ancora in cache.

Aggiornamento

Ok, mi è stato parzialmente sbagliato. A quanto pare, il seguente funziona in IE:

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

Tuttavia, non è sicuramente lavorando in FF, che è ancora mostrando una versione in cache. Qualche idea sul perché questo è, e su come posso farlo smettere di fare il caching?

+2

cattiva notizia: http://blogs.imeta.co.uk/JDeabill/ archivio/2008/07/14/303.aspx – danii

+0

Apparentemente è stato corretto, ma scommetto che ci sono alcune versioni ff che hanno esperienza di questo comportamento –

+0

Sto usando l'ultima versione di FF, e continuo a vedere questo comportamento, a meno che non aggiungo un quoystring falso alla fine dell'URL. – croceldon

risposta

13

Fai tutti i browser sono in linea:

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

Non è bello, ma si adatta alla domanda ha chiesto: "Come forza .. . "

+0

Questo sembra funzionare bene - qualsiasi corpo ha qualche idea che sarebbe "carina"? – croceldon

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

Ok: sembra funzionare in IE, ma NON funziona in FF. Qualche idea, perché? – croceldon

0

Prova ingannare il browser con una querystring spuria:

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

L'intestazione Cache-Control è il modo corretto per farlo. –

+0

Sì, questo è solo un trucco, che a volte può essere utile, ma non in questo caso;) – Strae

+0

'Corretto' non è sempre pratico. – graphicdivine

38

vorrei giocare in tutta sicurezza e provare a produrre tutti gli assassini di cache che l'uomo conosca (e il browser). La mia lista è attualmente composto da:

<?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

Ti capita di conoscere l'ordine di precedenza di queste diverse intestazioni? Sono sicuro che varia per browser, ma sarebbe utile sapere almeno per IE e FF. –

+11

ucciderlo, bruciarlo, lanciare le ceneri al sole in una capsula sigillata –

+1

Ho appena provato tutto quanto sopra, ma sembra che stia ancora memorizzando nella cache la pagina. – croceldon

14

Questo è l'ordine corretto per farlo funzionare su tutti i browser:

<?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 
?> 

fare questo e dovrebbe impedire la memorizzazione nella cache in tutti i browser

testato in IE FF e Chrome

Problemi correlati