有没有办法使用PHP识别某人是否刷新了当前页面,而不是从其他地方到达。
我只能访问当前页面的代码,因此无法传递任何内容以检查其他地方的内容。
有没有办法使用PHP识别某人是否刷新了当前页面,而不是从其他地方到达。
我只能访问当前页面的代码,因此无法传递任何内容以检查其他地方的内容。
您的问题标题表明您特别想知道如何检测使用F5键刷新页面的方法。如果是这样,您肯定需要使用JavaScript来检测是否按下了该键。如果您不关心页面是如何刷新的,那么这个答案应该会有所帮助:https://dev59.com/1EbRa4cB1Zd3GeqPy0YO#456915。它考虑了完整的URL以及任何表单内容。
添加一个unload()
事件,可以通过AJAX设置cookie或启动PHP会话。然后,在下次加载页面时,检查cookie或会话 - 如果它存在且非常新,那么用户刚刚进行了刷新。
不,没有。
PHP提供了$_SERVER
变量与HTTP_REFERER
变量。不幸的是,网络浏览器只有在位置更改(如单击链接等)时才会更新referer值(它们在请求中发送给Web服务器的)。然而,对于F5刷新,它们不进行更新(因为页面毕竟不是其referer。用户通过按下f5采取了行动)。
但是,您可以使用JavaScript或其他客户端脚本来跟踪按键或页面卸载。然后,您可以使用客户端脚本在客户端上识别刷新,或者更新一些服务器端的用户跟踪。
您还可以仅在服务器端跟踪用户请求的页面。但这不能具体标识F5刷新。标签关闭/打开、重新打开链接等也将导致请求相同的URI。
是的,有一种方法可以检测F5浏览器刷新。我已经在Chrome和Firefox中测试了这个解决方案,它有效。
$cacheControlRequestHeader = ', '.strtolower($_SERVER['HTTP_CACHE_CONTROL']).', ';
if (strpos($cacheControlRequestHeader, ', max-age=0, ') !== false){
$isF5Refresh = true;
}
当我在Internet Explorer 11中测试时,“max-age”无法正常工作。但是您可以使用以下代码在IE中检测Ctrl + F5:
$cacheControlRequestHeader = ', '.strtolower($_SERVER['HTTP_CACHE_CONTROL']).', ';
if (strpos($cacheControlRequestHeader, ', no-cache, ') !== false){
$isControlF5RefreshIE = true;
}
没有绝对可靠的方法来识别客户端或服务器端的F5刷新。但我有一个想法:
每次加载页面时:
LAST_VIEWED_PAGE