【问题标题】:PHP Page content loads from cache when loading same page multiple times多次加载同一页面时,PHP页面内容从缓存中加载
【发布时间】:2014-05-18 14:49:12
【问题描述】:

我通过读取会话变量来显示购物车产品。

如果在 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">

【问题讨论】:

  • 试试这个:
  • 在我看来,这不是与缓存相关的问题。向我们展示如何分配会话变量。
  • @Su4p : 那么当我做 F5 时它是如何工作的呢?
  • @Danny 会话和缓存不相互交互。如果你执行 F5 甚至 ctrl+F5 它不应该改变会话变量。
  • @logan 这就是我想知道的。这就是为什么我想看看你如何分配你的会话。

标签: javascript php jquery html session


【解决方案1】:

有一些可能性:

  1. 您正在开发单页应用程序,那么您应该手动更新“页面”1 的内容
  2. 您正在使用 javascript 命令“history.go(-1);”要导航回第 1 页,如果是这种情况,我建议使用常规链接
  3. 不知何故,您没有正确设置会话
  4. 您并没有真正使用会话

【讨论】:

  • 它不是单页应用程序。我正确地解释了这个问题。如果我没有正确设置会话,那么当我执行 CTRL + F5 时它是如何工作的?
  • 您是否使用 javascript 返回第 1 页?
  • 尝试使用常规链接:Page1
  • 你不需要那些随机数的东西,浏览器足够聪明,可以正确加载内容。随机数的东西在日历等应用程序中很有用(来自 javascript、ajax 等的内容),这不是你的情况
  • 我想使用 onclick.,所以随机数概念可以正常工作吗?
【解决方案2】:

redirect / 或拦截 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 逻辑相同)

【讨论】:

  • 这将在加载页面后刷新页面......我希望它在首次加载时发生
【解决方案3】:

你如何背靠背导航,你有一个被点击的 url 导航回来还是你使用 window.history.back()?

如果您使用 javascript 进行导航,那么这可能是问题所在。当导航回第 1 页时,使用末尾带有缓存中断的 url,如下所示

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

【讨论】:

  • 我使用 onclick 事件导航页面.. 请使用 EDIT 查看我更新的问题
  • + Math.random();是什么意思
  • 这只是一个缓存破坏者,如果页面是从缓存中加载的,那么最后随机将使它从服务器下载一个新页面
【解决方案4】:

请尝试添加 &lt;?php echo "&lt;!--" . rand(0,9999999) . "--&gt;"; ?&gt; 在索引页面上的代码中。

那么请再次尝试上述程序并告诉我结果。

并尝试添加

<?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');
    }
?>

【讨论】:

  • "; ?&gt; 为什么要我加?在哪里添加这个?我的代码中的所有语法都是正确的
  • @logan ,抱歉这里的代码没有正确显示,但我格式化了它,现在可以正确显示了。
  • @logan 您是否在任何 php 框架之上构建它,如果没有,您是否使用任何缓存类?
【解决方案5】:

默认情况下 window.location 使用 assign() 来更改位置,通常这已经足够了,但我认为您可以使用 replace() 来代替并获得所需的结果。像这样的东西: window.location.replace('page1.php')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2014-01-17
    • 2018-04-25
    • 2014-05-09
    相关资源
    最近更新 更多