使用PHP检测浏览器是否刷新

时间:2009-01-19 08:02:42

标签: php refresh

我想检测是否使用PHP刷新浏览器,如果刷新浏览器,应该执行哪些特定的PHP代码。

6 个答案:

答案 0 :(得分:13)

当用户点击刷新按钮时,浏览器会在$ _SERVER数组中包含一个额外的标题。

使用以下方法测试刷新按钮:

    $refreshButtonPressed = isset($_SERVER['HTTP_CACHE_CONTROL']) && 
                            $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';

答案 1 :(得分:12)

如果页面已刷新,那么您希望相互跟随的两个请求是相同的URL(路径,文件名,查询字符串)和相同的表单内容(如果有)(POST数据)。这可能是相当多的数据,因此最好将其哈希。所以...


<?php
session_start();

//The second parameter on print_r returns the result to a variable rather than displaying it
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));

if ($_SESSION['LastRequest'] == $RequestSignature)
{
  echo 'This is a refresh.';
}
else
{
  echo 'This is a new request.';
  $_SESSION['LastRequest'] = $RequestSignature;
}

在AJAX情况下,您必须注意将此代码放入哪些文件,以免更新异步调用的脚本的LastRequest签名。

答案 2 :(得分:3)

<?php

    session_start();
    if (!isset($_SESSION["visits"]))
        $_SESSION["visits"] = 0;
    $_SESSION["visits"] = $_SESSION["visits"] + 1;

    if ($_SESSION["visits"] > 1)
    {
        echo "You hit the refresh button!";
    }
    else
    {
        echo "This is my site";
    }

    // To clear out the visits session var:
    // unset($_SESSION["visits"]);

?>

答案 3 :(得分:1)

如果您想要区分用户在重新加载页面时首次访问该页面,请检查引荐来源。在php中它是:$ _SERVER [“HTTP_REFERER”]。查看它是否与运行脚本的页面相同。可能是客户端不提供此信息的情况,如果发生这种情况,您可以设置cookie或会话变量来跟踪上次请求的页面是什么。

答案 4 :(得分:1)

如果有人刷新页面,则会发送与上一个页面相同的请求。因此,您应该检查当前请求是否与最后一个请求相同。这可以按如下方式完成:

session_start();

$pageRefreshed = false;
if (isset($_SESSION['LAST_REQUEST']) && $_SERVER['REQUEST_URI'] === $_SESSION['LAST_REQUEST']['REQUEST_URI']) {
    if (isset($_SERVER['HTTP_REFERER'])) {
         // check if the last request’s referrer is the same as the current
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === $_SESSION['LAST_REQUEST']['HTTP_REFERER'];
    } else {
         // check if the last request didn’t have a referrer either
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === null;
    }
}

// set current request as "last request"

$_SERVER['LAST_REQUEST'] = array(
    'REQUEST_URI'  => $_SERVER['REQUEST_URI'],
    'HTTP_REFERER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null
);

我没有测试过,但应该可以使用。

答案 5 :(得分:1)

要防止用户点击浏览器刷新或返回按钮时出现重复的表单处理,您需要使用页面实例ID会话变量和包含该变量的隐藏表单输入。当两者不匹配时,则用户刷新了页面,您不应该重新处理表单。有关详细信息,请参阅:

https://www.spotlesswebdesign.com/blog.php?id=11

相关问题