2010-10-11 47 views
1

我们在PHP中有一个应用程序。我们在此应用程序中进行更新和更改时出现问题。有时,由于浏览器缓存,用户不会获得最新版本的应用程序(HTML和JavaScript主要发生更改)。一旦我们意识到这个问题,我们可以包括在我们的应用程序的下一个代码(我们执行它之前的任何HTML发送到浏览器)由于浏览器缓存导致PHP应用程序更新问题

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询问服务器是否有更新。如果是这样,强制重新加载。如果这是解决我们问题的最佳方法:我们该如何实施此解决方案?如果您有任何其他可能的解决方案,我们将非常乐意知道它。

感谢

+1

我的猜测是,正在查看程序“旧”版本的用户有IE。因此,Ajax也是我的选择,因为如果你点击重载按钮,IE有时甚至不会重新加载页面,所以更改不会被注意到。 – ITroubs 2010-10-11 09:37:12

+0

定义“应用程序的最新版本”。这与HTML代码,JavaScript或CSS资源或图像有关吗? – 2010-10-11 09:50:22

+0

我编辑它。但主要是这可能是我们需要做出的任何改变:HTML或javascrpt,但我们也计划添加图像,并且在接下来的几周内可能会出现问题。 – pepersview 2010-10-11 10:10:22

回答

0

存储在一个变量和使用Ajax做一个Ajax请求的每一分钟,并检查wheterh更新时间从变量所存储的更新时间不同,最后的更新。如果是的话,用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: 这是HTML包括jQuery的:

<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只是返回上次更新的页面。你如何跟踪最新的更新取决于你。

+0

我不明白如何做到这一点。 – pepersview 2010-10-11 10:40:54

+0

看到我的编辑。顺便说一句,你需要包括jquery源使用我的例子! – ITroubs 2010-10-11 11:48:02

+0

非常感谢您澄清我的疑惑。 last_update.php假设里面有什么?我们没有跟踪更新,我们只是在请求的应用程序中进行更改。 – pepersview 2010-10-12 08:51:40

0

IE缓存来自同一个URL的文件,假设你正在从你的html头文件加载js文件,你可以尝试随机化一个查询号码,只是为了强制IE将它解释为一个新的URL,重新加载它。

例子:

<?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浏览器将被迫重新加载它。

+0

这个问题不仅在IE中,我们也在Mozilla中有过 – pepersview 2010-10-12 07:57:34

+0

我认为最好是附加当前时间描述符而不是随机数,随机数需要更多时间来生成和有时你会碰撞,现在的时间总是新的(包括毫秒级的时间)。干杯。 – 2011-04-17 13:25:02

相关问题