簡體   English   中英

如何阻止瀏覽器緩存動態內容

[英]how to stop browser from caching dynamic content

我有php生成的頁面,每隔幾分鍾就會根據底層數據進行更改。 一切都很好,直到用戶關注鏈接。 當用戶單擊其瀏覽器上的后退按鈕以返回時,將顯示先前加載的頁面版本。 瀏覽器沒有從服務器重新加載頁面。

要從服務器獲取新內容,用戶必須單擊“重新加載”。

我嘗試了普通的meta標簽,並從php輸出header()。

IE,FF和Chrome中的行為相同。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
  Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache">

嘗試設置這些標頭

header("Cache-control: no-store, no-cache, must-revalidate");
header("Expires: Mon, 26 Jun 1997 05:00:00 GMT");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

這告訴瀏覽器不要緩存頁面,所以它應該在它們回擊時重新加載。

所有瀏覽器都沒有一個解決方案。

無論你使用什么標頭,一些瀏覽器似乎總是緩存!

我剛剛提出了我自己正在尋找的解決方案。 它一直盯着我。

這不會阻止瀏覽器緩存數據,它只會在頁面重新加載后停止從緩存中重新讀取過時數據。 如果數據是敏感的並且從不希望將其寫入緩存,您仍然可以使用這些標頭,但它並不適用於所有情況。 在我不需要的應用程序中,我只想避免從瀏覽器緩存中加載陳舊數據。

這個解決方案非常簡單,只需要很少的專業知識即可實現。

我使用php,但我相信URL變量可以與asp,javascript等等一起使用

您的瀏覽器看到http://example.com/index.phphttp://example.com/index.php?x=32http://example.com/index.php?x=3199所有不同的URL所以它不會使用任何上述URL作為另一個的緩存。

我在PHP中生成一個隨機數,你可以在ASP中做

在PHP中我使用:

$rand=(rand(1, 99999));

現在我在PHP中的鏈接(即使使用有限的PHP也應該很容易理解)

'<a href="http://example.com/index.php?rand='.$rand.'>"

如果頁面已經有URL變量,那么我們將它添加到任何GET表單或連接鏈接。

如果表單是帖子表單,我們會在“操作”URL上標記它,所以

http://example.com/index.php 

http://example.com/index.php?rand=<?php echo $rand;?>

然后我不想緩存的任何頁面我只是將這個隨機數添加為URL變量。 該URL變量根本不是由服務器處理的,我從來沒有得到那個數字而且不需要。

http://example.com/index.php?rand=4398下次我們加載同一頁面時,由於rand = URL變量不同,瀏覽器認為它是一個不同的頁面。

不用擔心我們永遠不必閱讀它,它只是“愚弄”瀏覽器。 下一個我們去同一頁面的時間,我們很可能會看到一個非常不同的數字

http://example.com/index.php?rand=55468

或者就你的瀏覽器而言,不是相同的頁面,即使我們完全丟棄了服務器上的變量,這意味着它在你的ASP或PHP中沒有任何價值,也從未用作變量。

答案現在很簡單,我被匆匆忙忙地花了幾周時間,沒有任何工作能夠持續下去。 這樣做!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM