有什么办法在PHP中识别F5刷新?

时间:2012-01-14 08:46:46

标签: php

有没有办法确定某人是否使用PHP刷新当前页面而不是从其他地方来到。

我只能访问当前页面的代码,因此我无法从其他位置传递任何内容以进行检查。

5 个答案:

答案 0 :(得分:6)

您的问题的标题表明您正专门寻找一种方法来检测何时使用F5键刷新页面。如果是这种情况,您肯定需要JavaScript来检测密钥是否被按下。如果您不关心页面的刷新方式,那么这个答案应该有所帮助:https://stackoverflow.com/a/456915/1144176。它考虑了完整的URL以及任何表单内容。

答案 1 :(得分:3)

添加unload()事件,该事件可以设置cookie,也可以通过AJAX启动PHP会话。然后,当下次加载页面时,检查cookie或会话 - 如果它存在且非常近,则用户刚刚刷新。

答案 2 :(得分:3)

不,没有。

PHP为$_SERVER变量提供HTTP_REFERER变量。不幸的是,Web浏览器只更新引用值(它们在请求中发送给Web服务器)的位置变化,如点击链接等;一方将您发送给另一方(即使该页面通过链接将您发送给自己)。然而,对于F5,他们没有(因为页面毕竟不是它的引用者。用户通过按f5来采取行动)。

但是,您可以使用JavaScript或其他客户端脚本来跟踪按键或卸载页面。然后,您可以使用客户端脚本来识别客户端上的刷新,或者更新服务器端的某些用户跟踪。

您还可以单独跟踪服务器端的用户请求的页面。但这并不是特别标识F5刷新。 tab close / open,重新打开链接等也会导致请求相同的URI。

答案 3 :(得分:2)

在客户端或服务器端没有识别F5刷新的防弹方法。但我有这个想法:

每次加载页面时:

  • 将当前网址与会话变量进行比较(见下文)。如果它们相同,则可以假定用户重新加载页面
  • 将当前网址存储在会话变量中,例如LAST_VIEWED_PAGE

答案 4 :(得分:1)

是的,有一种检测F5浏览器刷新的方法。我已经在Chrome和Firefox中测试了该解决方案,它可以工作。

$cacheControlRequestHeader = ', '.strtolower($_SERVER['HTTP_CACHE_CONTROL']).', ';
if (strpos($cacheControlRequestHeader, ', max-age=0, ') !== false){
    $isF5Refresh = true;
}

当我在Internet Explorer 11中对其进行测试时,“最大年龄”无效。但是您可以使用以下代码在IE中检测Ctrl + F5:

$cacheControlRequestHeader = ', '.strtolower($_SERVER['HTTP_CACHE_CONTROL']).', ';
if (strpos($cacheControlRequestHeader, ', no-cache, ') !== false){
    $isControlF5RefreshIE = true;
}