我想检测是否使用PHP刷新浏览器,如果刷新浏览器,应该执行哪些特定的PHP代码。
答案 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会话变量和包含该变量的隐藏表单输入。当两者不匹配时,则用户刷新了页面,您不应该重新处理表单。有关详细信息,请参阅: