簡體   English   中英

多次加載同一頁面時,PHP頁面內容將從緩存加載

[英]PHP Page content loads from cache when loading same page multiple times

我正在通過讀取會話變量來顯示購物車產品。

如果在page1中添加了產品,那么我正在設置會話數組變量。 導航到page2后,我正在加載會話內容以在page2的購物車中顯示產品。

然后,如果我在page2中添加了任何產品,然后轉到page1 ,則page1沒有顯示刷新的內容,而是從page1緩存中獲取內容。

但是當我做F5或CTRL + F5時,它工作正常...

我希望頁面每次訪問時都不會從緩存加載,即使它是同一頁面也是如此。

這是我的代碼:

<?php 
    echo "<script>
    $(document).ready(function() {";
    echo "add1('".$session_variable."')";
    echo "});</script>";
?>
<script>
add1(item)
{
document.getElementById('ItemName').value=item;
}
<script>

編輯:我使用如下onclick事件從頁面1導航到頁面2。

<a onclick="window.location='page2.php'" style="text-decoration:none">Page2</a><br>
<a onclick="window.location='page1.php'" style="text-decoration:none">Page1</a><br>

我添加了以下幾行,但沒有用。

<META HTTP-EQUIV="Pragma" CONTENT="no-cache,must-revalidate">
<META HTTP-EQUIV="Expires" CONTENT="-1">

您如何前后導航?您是否有一個被單擊的網址向后導航,或者您是否使用window.history.back()?

如果您使用JavaScript導航回來,則可能是問題所在。 導航回第1頁時,請在其末尾使用帶有緩存符的URL,如下所示

window.location.href = "/page1.php?cb=" + Math.random();

有一些可能性:

  1. 您正在開發一個單頁面應用程序,那么您應該手動更新“頁面” 1的內容
  2. 您正在使用javascript命令“ history.go(-1);” 導航回到第1頁,如果是這種情況,我建議使用常規鏈接
  3. 您某種程度上無法正確設置會話
  4. 您不是真的在使用會話

重定向/或攔截f5鍵/來調用帶有參數的頁面,例如:

$(document).ready(function() {
var dfocus  = $("input");
dfocus.keydown(function(e) {
    if (e.keyCode == 116 ) { //f5
        document.location.href="mypage.php?id="+Math.random(); // this may enforce to reload the page
    }
...

那么您將強制加載頁面。 (與具有緩存的img src邏輯相同)

請嘗試添加<?php echo "<!--" . rand(0,9999999) . "-->"; ?> <?php echo "<!--" . rand(0,9999999) . "-->"; ?> <?php echo "<!--" . rand(0,9999999) . "-->"; ?>在索引頁上的代碼中。

然后,請再次嘗試上述步驟,並告訴我結果。

並嘗試添加

<?php
    if(!session_id()) {
        @session_start();   
    }
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: ' . gmdate( 'D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache'); 

    if(isset($_SESSION['form_submitted'])) {
        unset($_SESSION['form_submitted']);
        header('Location: ?' . uniqid());
        #header('Refresh: 0');
    }
?>

默認情況下,window.location使用assign()來更改位置,通常這已經足夠了,但是我認為您可以使用replace()來獲得期望的結果。 這樣的事情:window.location.replace('page1.php')

暫無
暫無

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

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