由于浏览器缓存,PHP应用程序更新出现问题

时间:2010-10-11 09:29:54

标签: php ajax caching reload

我们在PHP中有一个应用程序。当我们在此应用程序中进行更新和更改时,问题就出现了。有时,由于浏览器缓存,用户无法获取应用程序的最新版本(HTML和javascript主要更改)。一旦我们意识到这一点,我们就可以在我们的应用程序中包含下一个代码(我们在将任何HTML发送到浏览器之前执行它)

function clean_cache(){
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header("Cache: no-cache");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
}   

但是我们仍然有一些用户使用旧版本的应用程序。 我们读到一个可能的解决方案是使用javascript通过ajax询问服务器是否有更新。如果是这样,强制重新加载。如果这是解决问题的最佳方法:我们如何实施此解决方案?如果您有任何其他可能的解决方案,我们将非常乐意了解它。

由于

2 个答案:

答案 0 :(得分:0)

将最后一次更新存储在变量中,并使用ajax每分钟执行一次ajax请求,并检查更新时间是否与变量中存储的更新时间不同。如果是这样,重新加载window.location =“新位置”;

编辑:

它应该如下所示: (但我没有测试它所以我不保证它能工作)

var updateTime = '<?php echo $lastUpdateTime;?>';
$(document).laod(function(){
    var reload = window.setInterval("request()", 60000);
});

function request(){
    $.get("last_update.php", function(data){
        if(updateTime != date) window.location = "redirect_to.php";
    });
}

编辑2: 这是包含jquery的HTML:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 

"redirect_to.php"是您将窗口重定向到的文件。所以,如果你想留在同一个网站,只需将网站的网址放在那里。

<?php $lastUpdateTime;?>有点内联PHP。我将其更正为<?php echo $lastUpdateTime;?>

last_update.php只是一个返回上次更新的页面。你如何跟踪上次更新取决于你。

答案 1 :(得分:0)

IE缓存来自同一网址的文件,假设您正在从html标头加载js文件,您可以尝试在网址中随机化查询编号,只是为了强制IE将其解释为新网址并重新加载它

示例:

<?php 
    $random = rand(1, 100000);

?>
<head>
<script type="javascript/text" src="../js/foo.js?v=<?php echo $random;?>"></script>
</head>
...

这将输出类似

的内容
<script type="javascript/text" src="../js/foo.js?v=5"></script>

如果你确定URL是“动态的”,IE将被迫重新加载它。