12

我有网页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 解决方案,它只是不断尝试以永无止境的循环刷新页面。我的逻辑中缺少什么?这是正确的方法吗?

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

4

6 回答 6

5

好的,试试这个:

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

您需要在第 2 页设置 $_SESSION['form_submitted'] = true。

于 2012-04-12T21:59:40.527 回答
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 -->
于 2012-04-12T21:58:15.940 回答
1

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

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

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

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

于 2014-04-09T09:32:48.883 回答
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/");
    }
?>
于 2012-04-12T22:08:54.383 回答
0
<?php 
  session_start();
  if(isset($_SESSION['reloadPage'])) {
  unset($_SESSION['reloadPage']);
  echo'
  <script>
  window.location.replace("/****/****/*****.php");
  </script>
  ';
}
?>
于 2012-04-12T22:03:09.647 回答
0

你的 JavaScript 应该是...

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

我认为这应该解决你的循环。

于 2012-04-12T21:57:27.743 回答