2012-04-12 56 views
10

我有网页A.用户点击表单提交数据,并将其带到网页B.当他点击后退按钮时,我需要网页A到从服务器刷新,而不是从缓存中加载。我有这个:<meta http-equiv="expires" content="0">但它似乎没有工作。我也尝试在页面B上设置变量(通过php使用会话变量),然后在页面A上检查它并根据它的存在进行刷新(或不刷新)。这似乎也起作用。造成这种情况的基本代码是: A页:强制页面从服务器重新加载,而不是加载缓存的版本

<?php 
if(isset($_SESSION['reloadPage'])) { 
unset($_SESSION['reloadPage']); 
echo' 
<script> 
window.location.replace("/****/****/*****.php"); 
</script> 
'; 
} 
?> 

而且第B:

$_SESSION['reloadPage'] = 1; 

随着PHP的解决方案,它只是不停地尝试刷新页面在永无止境的循环。我的逻辑中有什么遗漏?这是否正确?

编辑 经进一步调查,当你告诉浏览器不缓存的页面,是否强制完整服务器端刷新呢?这就是我需要的。完整的服务器端刷新页面。

+0

他们是我们可以看到的在线版本吗? – 2012-04-12 22:25:46

回答

5

OK试试这个:

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

您将需要设置$ _SESSION [ 'form_submitted'] =页面上真正2.

+0

不按预期工作。但是当进一步思考时,它似乎没有缓存页面......但是,从我所能告诉的这一点来看,它并不是令人耳目一新的服务器端。 – mdance 2012-04-12 22:06:28

+0

无法正常工作。我有点不知所措。 – mdance 2012-04-12 22:20:02

+0

他们是我们可以查看的在线版本吗? – 2012-04-12 22:36:56

0

你的JavaScript的应该是...

window.location = "/****/****/*****.php" 

我认为应该解决您的循环。

+0

我不认为他正试图将人送到谷歌。 – AndrewR 2012-04-12 21:59:35

+0

同样的结果。我相信问题是与我的PHP逻辑... – mdance 2012-04-12 22:08:34

2

试着用以下三种方法:

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache --> 
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' --> 
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any --> 
0
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
    unset($_SESSION['reloadPage']); 
    echo' 
    <script> 
    window.location.replace("/****/****/*****.php"); 
    </script> 
    '; 
} 
?> 
+0

会话已在页面顶部启动。 – mdance 2012-04-12 22:05:12

1
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
     unset($_SESSION['reloadPage']); 
      //no outputting code above header 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     header("Location: http://www.mypage.com/"); 
    } 
?> 
+0

它说了太多重定向...尽管我相信这是迄今为止最好的解决方案。它似乎是不正确unsetting reloadPage变量。 – mdance 2012-04-12 22:12:31

+0

可能是头已经被发送,如果在头之前有任何输出代码,如任何HTML或者echo/print,或者其他任何被输出到文档的头,这将会发生,头应该是第一件事已发送。这通常会给出一个“头已发送”的错误,所以它也可以是未设置的会话变量,并且它保持在一个循环中,尝试绕过一点,或检查变量的某个值,然后设置它为null而不是取消设置等。 – adeneo 2012-04-12 22:17:38

1

我知道这是老问题,已经有答案了呃(不从服务器刷新)。所以我想分享一个使用jQuery的解决方案。

$('#back-button').click(function(){ 
    setTimeout(location.reload(true), 1000); 
}); 

说明:
当单击后退按钮时,setTimeout会后1秒(1000毫秒)触发。然后,页面将从服务器重新加载,因为reload中的参数是true

如果你把true放在reload里面,它将从服务器重新加载,而如果你把false它从缓存中重新加载。来源w3schools

相关问题