2012-07-06 44 views
0

我有一個PHP應用程序,它使用$ _SESSION全局來管理應用程序中的數據。但是我必須要更新的$ _SESSION的值時,一個小問題,這是我迄今所做的:

  1. 做的東西
  2. 未設置($ _ SESSION [「變種」])
  3. 做東西
  4. $ _SESSION ['var'] = newValue();

我打電話使用$.post()這樣的PHP:

$('#id').click(function(){ 
    $.post("page.php", function(data){ 
     //do stuff 
     window.location = "goto.php"; 
    }) 
}) 

goto.php抓住從$ _SESSION [ '變種']的內容,構建一個新的HTML。

但是,當網頁轉到goto.php時,它會加載使用最新版本$_SESSION['var']創建的html。請注意,如果我刷新網頁,則會加載使用新的$_SESSION['var']創建的新內容。

此外這不是一個常規的行爲,有時它沒有頁面重新加載正確加載。

我在做什麼這樣從根本上錯誤在這裏?

+0

你檢查,它是通過清除緩存加載最新的網頁? – Sablefoste 2012-07-06 19:27:23

+0

是的,只有通過刷新頁面才能獲得正確的內容。 @SableFoste – 2012-07-06 20:07:12

+0

我不是專家,但顯然jQuery $ .post不會更新您的$ _SESSION變量,但因爲它是一個AJAX請求,顯示的當前頁面不會更改,直到刷新。您的原始頁面(您稱爲$ .post)goto.php,還是page.php或其他頁面? – Sablefoste 2012-07-06 20:43:24

回答

1

這幾乎肯定是緩存問題。您可以向瀏覽器發送某些標題以強制其不緩存頁面,從而確保每次都能重新加載。

您可以在PHP中使用做到這一點:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1. 
header('Pragma: no-cache'); // HTTP 1.0. 
header('Expires: 0'); // Proxies. 

來源:How to control web page caching, across all browsers?

+0

嗯,我asume這個答案意味着什麼都沒有被緩存,例如圖像。有沒有一半的方法來定義什麼緩存和什麼不緩存? – 2012-07-06 20:04:29

+0

只適用於特定頁面。你在這個頁面上是否有圖片或類似的東西? – Tushar 2012-07-06 20:24:52

+0

是的,它有所有,腳本,圖像等 – 2012-07-06 20:33:44