Php 表格递交率上限

Php 表格递交率上限,php,mysql,forms,cookies,limit,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')

在我的新网站上,我想通过限制用户每小时最多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();
$sql=“插入mysql_表(时间戳、条目、uid、allowcomments)值(“$timestamp”、“$entry”、“.rndTxt(16)。”、“$allowcommenting”);
$result=mysql\u query($sql)或print(“无法插入到表中。
“$sql。”
“.mysql\u error()); 如果($result!=false){ 如果(isset($_COOKIE['AnonPost'])) { $hour=time()+3600; setcookie(“AnonPost”、“2”和$hour); } 否则{ $hour=time()+3600; setcookie(“AnonPost”、“1”和$hour); } 打印“”; } mysql_close();
然后,稍后的if/else语句检查它是否存在,以及值是什么(如果不存在,他们会将站点视为正常,如果存在,并且val=1,则会显示一条消息,表示只剩下一篇文章,如果val=2,则会收到一条消息,表示他们这一小时的文章已用完。)

这在我的本地主机上有效,但在站点本身不起作用()知道为什么吗


除此之外,我知道这不是限制帖子的最佳方式,因此,有谁能帮助我限制表单提交,或者就我的cookie问题向我提供建议吗?

减少垃圾邮件有很多方法

验证码系统

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

邮件发送过程中的垃圾邮件识别。查找垃圾邮件关键字

蜜罐领域的形式。这使用CSS在每个表单上隐藏一个蜜罐输入字段。如果请求到达服务器时填写了该字段,那么您知道有一个bot提交了表单,可以忽略该请求


像stack exchange上的信誉系统一样。只有在用户建立了一定的声誉后,您才允许他们做某些事情。

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

考虑2:谈到SeScEXSTART,您可能需要考虑设置一个$JUIL会话变量,而不是设置Cookie。

  • 它们更容易使用和处理
  • 除了销毁php会话cookie之外,用户无法修改它们(但之后他们将重新登录,此时您可以再次检查)
  • 您可以在启动会话后的任何时候设置/修改/删除它们,而无需记住在调用“print”、“printf”或“echo”之前设置cookie
  • 你正在降低你的报头带宽-总是一件好事
    • 使用cookie(因为它存储在客户端)不是设置限制的安全方法。用户可以很容易地更改它,因此您应该尝试服务器端方法

      在这里,您可以简单地从数据库中统计用户的帖子。类似这样的内容将为您提供用户在过去一小时内的帖子数量:

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

      你可能想寻找更好的方法来处理垃圾邮件。限制每小时的帖子会比垃圾邮件发送者更妨碍真正的用户。而且,cookies很容易被删除。嗯,我也曾这样想过,但这只是暂时的,因为我们正在整理更大的东西。我想知道,如果php会话将其限制为每次发布后必须等待60/120秒,然后才能再次发布,您认为这样做是否可行?更重要的是阻止人类垃圾邮件发送者持续发布你如何知道他们是人类而不是机器人?我已经有一个系统来阻止机器人,那些突破过滤器的可以单独处理,但是人类可以完成反垃圾邮件,然后发布,并且可以继续这样做。这就是我需要限制的。非常棒的帖子,我要补充的是蜜罐应该是$\u会话数组中随机的东西,这样机器人就不能只向$\u帖子发送变量。不必像你说的那样,在响应主体之前就在脚本的顶部。您可以使用输出缓冲来允许在任何地方设置cookie和其他头(尽管出于性能原因,如果可能的话,应该避免这样做)。我不想让它听起来像是第一件需要做的事情,然而,太多时候,它是罪魁祸首,有人认为他们有时间,4包括,有一个打印或回声的地方。缓冲会起作用,但这对于一个小任务来说是一个很大的飞跃。呵呵,非常正确。我以前肯定被那个烫伤过:)