php网站限制点击一秒钟

时间:2011-11-01 18:33:17

标签: php click limit

我有一个PHP网站,这是一个游戏,由于游戏的性质,人们垃圾点击按钮不耐烦。我认为这让我感到悲伤,从数据库中经常请求数据等,所以我想添加一个点击限制器,这样他们每秒只能点击一次,或者半秒钟。

如果没有在用户最后一次点击的数据库中存储一个注释,然后将它与那些点击太快的数据进行比较,有没有这样做呢?也许饼干? JavaScript的?会话?

正确方向的任何指针都很有用。

当我说点击时,我指的是刷新/重新加载页面等的链接/按钮 - 基本上是页面调用。

更新:每个页面都会请求大量数据,所以我想在页面顶部进行会话检查才能继续进行最简单的操作?

6 个答案:

答案 0 :(得分:1)

我会尝试使用setTimeout创建javascript控件,以限制何时可以点击操作按钮。

如果失败了,如果问题是真的快速刷新浏览器,请在请求到达PHP脚本之前使用可以检测+拒绝泛洪的内容

如果您可以控制您的apache / server设置,则可以使用http://code.google.com/p/autodrop/之类的内容 - 访问Apache访问日志的防洪保护脚本。通过iptables阻止某些ips超过定义的阈值。对于负载平衡API访问非常有用

答案 1 :(得分:0)

实际上限制服务器流量的唯一方法是使用Javascript阻止点击,因为这是客户端。对于大多数用户来说,这样会很好,尽管有些人可能已将其禁用或知道如何删除它。

使用会话将是更“正确”的方式,但是你的服务器仍然会受到一些压力。

答案 2 :(得分:0)

如果问题仅仅是数据库,而不是后端php服务器,请将其放在memcache中。

答案 3 :(得分:0)

我为页面上的所有可点击对象设置了onclick,以禁用页面上特定时间内的所有其他可点击对象,然后重新启用它们。如果他们没有任何可点击的内容,他们就无法点击垃圾邮件。

答案 4 :(得分:0)

最简单的方法是让所有服务器端脚本至少运行一段时间。例如如果您想在点击之间强制执行2秒的延迟,请执行

<?php


session_start();    

$start = microtime(true);

.... do stuff

$end = microtime(true);

if (($end - $start) < 2) {
   sleep (2 - ($end - $start));
}

让每个脚本保持会话打开(假设您使用基于标准文件的会话)处理程序将在此脚本运行时有效锁定用户,因为PHP在使用时锁定会话文件,并阻止任何在锁定时,启动并行命中。

时间计算只会强制执行时间延迟,因此即使用户从刷新按钮中弹出,他们仍然只能每2秒获得一页。

答案 5 :(得分:0)

同样的问题,不同的主题和相同的答案:

session_start();

$now = time();

if ($_SESSION['click'] > ($now-1)) { 
    exit("You're clicking too fast") ; 
}

$_SESSION['click'] = $now;