阻止人们刷新页面

时间:2009-08-05 18:07:32

标签: php refresh webpage

我是否还能让它工作,所以任何按下F5或任何刷新按钮的人都会被移动到另一个页面,而不是刷新用户想要的页面?

类似的东西:

If (refresh){

  goto "link to hopme page"

}

如果没有,我还是不允许在特定页面上刷新?

我有些人只是不停地刷新而且它正在消耗我的带宽。这是一个游戏网站,所以我不想禁止ip。

11 个答案:

答案 0 :(得分:12)

也许您应该专注于减少页面使用的带宽。探索图像压缩,页面优化和缓存等领域。

答案 1 :(得分:8)

session_start();
if($_SESSION['hasbeenhere'] == 1)
{
 // Page refreshed
}
else
{
   $_SESSION['hasbeenhere'] = 1;
}

如果此人未启用Cookie,则会失败。如果有人转到另一个页面并返回,它将显示为刷新。

总的来说,你不能以肯定的方式做到这一点,但这是防止某人两次看到同一页面的一种方法。

由于您的评论,如果您想阻止人们按F5 200次,请尝试此操作。

$page = $_SERVER['REQUEST_URI'];
// Defaults
if(!isset($_SESSION[$page]['count']))
{
    $_SESSION[$page]['count'] = 1;
    $_SESSION[$page]['first_hit'] = time();
    $_SESSION[$page]['banned'] = false;
}
else
{
    $_SESSION[$page]['count']++; // Increase the counter
}

// If person is banned, end script
if($_SESSION[$page]['banned'] == true)
{
    die();
}

if($_SESSION[$page]['first_hit'] < time() - 30)
{
    $_SESSION[$page]['count'] = 1; // Reset every 30 seconds
}

if($_SESSION[$page]['count'] > 100)
{
    $_SESSION[$page]['banned'] = true; 
    // Ban if they hit over 100 times in 30 seconds.
}

答案 2 :(得分:3)

你为什么要这样做?

但不,没有办法可以始终如一地阻止这种行为。

答案 3 :(得分:3)

在PHP代码中,执行以下操作:

 if(isset($_SESSION["pagename-LAST_VIEWED"])) {
    v = $_SESSION["pagename-LAST_VIEWED"])
    if(time() - v < 15) {
       // user is refreshing more than once per 15 seconds
       // send them something else and die
       }
 }
 $_SESSION["pagename-LAST_VIEWED"] = time();

请忽略我的crummy伪PHP,这不是我的日常用语。

这将阻止页面刷新(F5)用户再次单击书签或再次按地址栏中的Enter键。

您还可以启用一些积极的缓存元标记和HTTP标头,这样可以防止某些刷新而无法访问您的服务器,但上述代码应具有相当的可扩展性。

要考虑的另一件事:根问题是您的其他代码,而不是您的用户。考虑重写您的页面,以便在定时延迟时通过AJAX自动更新他们想要查看的部分。这将激励他们不要使用Refresh,并且只需刷新他们希望更新的一小部分数据,就可以帮助您的服务器应对。

答案 4 :(得分:1)

我不知道这是否有用,但是你能用javascript听点击键吗?在F5按键上,做你想做的事。

答案 5 :(得分:0)

我想你可以这样做:

session_start();

if (isset($_SESSION['visited'])) {
    header("Location: http://the.page/you/want");
} else {
    $_SESSION['visited'] = true;
}

答案 6 :(得分:0)

为了阻止F5刷新,您必须不允许刷新任何类型。作为一个黑客,您可以尝试在查询字符串中添加时间戳。在加载时,您可以检查时间戳的值,如果它是过去的,则重定向到另一个页面。如果禁用cookie,这将起作用。

答案 7 :(得分:0)

网站本身使用Javascript执行此操作,因此当您编辑某些内容时,不要通过刷新,返回等来放松它。可能有一些JQuery定义的事件允许您执行此操作,因此请查看,并在该事件上,重定向到您想要的页面(可能必须在同一个域内)。

答案 8 :(得分:0)

在我看来,这个问题没有很好的技术解决方案(其他答案很清楚)。如果用户不断在这个页面上刷新,我猜测是因为他们希望页面改变,他们想要最新的信息。也许你应该拿走他们想要刷新页面的理由。最简单的方法可能是让页面更新(可能是通过AJAX)。因此,用户可以坐在那里进行更新 - 不再抨击F5,这将减少您的带宽,更不用说是更好的用户体验。

答案 9 :(得分:0)

它没有直接回答你的问题,但你可以用缓存来解决你的问题吗?

如果您发送标题 Cache-Control:public,max-age = 120 这应该指示浏览器它不需要再次请求页面2分钟,并且可以使用它的缓存中的副本。如果当然他们可以使用control-f5来强制刷新,但它应该有很多帮助吗?

答案 10 :(得分:0)

我只是找到一个非常简单的解决方案。

对我来说,在我处理了所有$ _POST信息并将我需要的信息保存到$ _SESSION var后,我这样做:

$_SESSION['admin']['PID']=session_id();
$_SESSION['admin']['user_user']=$_POST['user'];
$_SESSION['admin']['user_pass']=$_POST['pass'];
$_SESSION['admin']['last_access_time']=time();
if($_SERVER['REQUEST_METHOD']==="POST")
{
    header("LOCATION:".$_SERVER['PHP_SELF']."?p=redirected");
}

在我的情况下,我试图验证用户,我有一个问题,当有人退出并返回并再次刷新网站加载,如果我终于解决了这个简单。

PD:。“?p =重定向”仅用于测试porpouse