限制表单提交率

时间:2011-10-18 21:16:16

标签: php mysql forms cookies limit

在我的新网站上,我希望通过将用户限制为每小时最多2个帖子来减少垃圾邮件(这可能会更改为允许更多,但现在只有2个)我设计了一种使用Cookie的方法,但是,出于某种原因该网站没有设置cookie,这是我的cookie代码:

    $sql = "INSERT INTO mysql_table (timestamp,entry,uid,allowcomments) VALUES ('$timestamp','$entry','".rndTxt(16)."','$allowcommenting')";

    $result = mysql_query($sql) or print ("Can't insert into table.<br />" . $sql . "<br />" . mysql_error());

   if ($result != false) {

        if(isset($_COOKIE['AnonPost']))
        {
        $hour = time() + 3600; 
        setcookie("AnonPost", "2", $hour); 
        }

        else {
        $hour = time() + 3600; 
        setcookie("AnonPost", "1", $hour); 
        }

        print "<meta HTTP-EQUIV='REFRESH' content='0; url=index.php'>";
    }

     mysql_close();

然后一个后来的if / else语句检查它是否存在,以及该值是什么(如果它不存在,他们会看到网站正常,如果它存在,val = 1则显示一条消息说只留下一个帖子,如果val = 2,他们会收到一条消息,说他们这小时已经没用了帖子。)

这适用于我的本地主机,但不适用于网站本身(http://aviatex14.co.uk/anonpost/)任何想法是什么原因?

除此之外,我知道这不是限制帖子的最佳方式,因此,任何人都可以帮我限制表单提交,或者就我的Cookie问题向我提出建议吗?

3 个答案:

答案 0 :(得分:6)

为了减少垃圾邮件,有很多方法

验证码系统。 http://www.google.com/recaptcha

帐户创建期间的电子邮件确认。

发布期间的垃圾邮件识别。寻找垃圾关键字。

表单中的蜜罐字段。这使用CSS来隐藏每个表单上的蜜罐输入字段。如果请求到达填写了该字段的服务器,您就知道机器人提交了表单并且可以忽略该请求。

声望系统就像堆叠交换上的那样。只有在用户累积了一定数量的产品后,才允许用户执行某些操作。

答案 1 :(得分:2)

考虑1:为了设置cookie,需要在将任何HTML发送到页面之前完成(因此它必须位于脚本的顶部,以及session_start)。

考虑2:说到session_start,您可能需要考虑设置$ _SESSION变量,而不是设置cookie。

  • 他们更容易使用和处理
  • 用户无法修改它们,除了破坏php会话cookie(但之后他们将重新登录,你可以在那时再次检查)
  • 您可以在开始会话后的任何时候设置/修改/删除它们,而不是在任何“print”“printf”或“echo”调用之前记住设置cookie
  • 你降低了标头带宽 - 总是好事

答案 2 :(得分:1)

使用cookie(因为它存储在客户端)不是设置限制的安全方法。用户可以轻松更改它,因此您应该尝试使用服务器端方法。

您只需在数据库中统计用户的帖子即可。这样的内容将为您提供过去一小时内用户的帖子数量:

select count(*) from mysql_table where uid='$uid' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR););