在按下浏览器上的后退和前进按钮时,如何强制重新加载PHP页面?

时间:2016-08-10 07:32:18

标签: php html

我正在尝试让PHP应用程序在Firefox,Internet Explorer浏览器上重新加载页面或向前翻页。

我已经制定了下面的代码,部分工作在某些页面上,换句话说,当我向前和向后导航时,我确实得到了一个页面重新加载而不是Document Expired或缓存页面。其他页面无法在后退或按下前进按钮时成功重新加载页面内容,而是提供公共消息Document Expired,表示我的方法在这些页面上没有成功。

Session.php - 包含在所有php脚本之上,主要处理重新加载请求的页面加载

 <?php
        session_start();

        $_SESSION['page_requested'] = $_SERVER['REQUEST_URI']; 


        if (isset($_POST['scrollamount']) && $_POST['scrollamount'] != "")
                $_SESSION['scrollamount'] = $_POST['scrollamount'];


        if (isset($_SESSION['page_loaded']) && !isset($_GET['load']))
        {
            unset($_SESSION['page_loaded']);
            if (strpos($_SESSION['page_requested'], '?') !== false)
            {
                header("Location: $_SESSION[page_requested]&load=1");
                exit;
            }
            else
            {
                header("Location: $_SESSION[page_requested]?load=1");
                exit;
            }       
        }
        else if (!isset($_GET['load']))
        {
          header("Location: ?load=1");
          exit;  
        }
    ?>

reload.php - 这会清除get值,以便不会遇到重定向循环,并且此脚本包含在上面的脚本和每个php脚本之后

<?
        $_SESSION['page_loaded'] = true;
        $_SESSION['page_requested'] = str_replace('&load=1', '', $_SESSION['page_requested']);
        $_SESSION['page_requested'] = str_replace('?load=1', '', $_SESSION['page_requested']);
?>

在每个带有标记的PHP页面上,我已将标记的内容修改为<body onunload="">,以尝试强制重新加载一些有见地的建议。

不幸的是,重新加载行为不能始终如一地工作。

如何修改我目前所使用的所有PHP脚本?

1 个答案:

答案 0 :(得分:0)

简短的回答:你不能。

当用户按下“返回”时,浏览器知道上一页是通过POST提交的,并询问用户是否要在加载任何内容之前重新提交表单。因此,您无法通过服务器端或客户端脚本添加任何会触发重新加载的内容,因为浏览器在提示用户之前甚至不会加载它。

防止这种情况的唯一方法是从POST切换到GET(当然还有其他缺点)。或者,您可以对所有POST表单使用AJAX,并在结果出现后重定向到下一页。