Cookie(PHP)问题

Cookie(PHP)问题,php,cookies,Php,Cookies,我有一个很奇怪的问题。嗯,在我的网站上,我有一个反馈和评论系统,都使用cookies来防止人们发送大量评论(大量垃圾邮件),阻止写评论或反馈帖子,例如30秒。如果他们禁用cookie,他们就不能评论或反馈。我使用带有JQuery脚本的系统,使用PHP中的进程来不刷新页面 第一个问题——出于某种原因,在localhost(托管在我家)上,它工作得很好,阻塞了用户。但在主机上,如果我上传脚本(例如,如果我想做更新),它会停止工作,我可以随意评论,它不会阻止。但它只是在我的电脑上(正如我测试的那样,在

我有一个很奇怪的问题。嗯,在我的网站上,我有一个反馈和评论系统,都使用cookies来防止人们发送大量评论(大量垃圾邮件),阻止写评论或反馈帖子,例如30秒。如果他们禁用cookie,他们就不能评论或反馈。我使用带有JQuery脚本的系统,使用PHP中的进程来不刷新页面

第一个问题——出于某种原因,在localhost(托管在我家)上,它工作得很好,阻塞了用户。但在主机上,如果我上传脚本(例如,如果我想做更新),它会停止工作,我可以随意评论,它不会阻止。但它只是在我的电脑上(正如我测试的那样,在我哥哥的笔记本上,在我的工作中工作正常),我也在IE、Firefox和Chrome上进行了测试。但几天后(随机,1-4),它开始工作良好。但是,如果我更新了脚本(即使不更改脚本),我会支持这个问题

第二个问题-关于投票(反馈)和评论系统,如果“阻止系统”工作正常,它将阻止用户30秒。但是,当我在第一秒钟快速点击提交评论时,它会提交两次。比如,做2/3(有时4)次相同的评论。但如果我在30秒前再次尝试评论,它将被阻止。如何防止人们重复提交

这里有一些代码给你,应该会有帮助

comments.php


高级感谢。

首先,不要使用cookies来阻止用户状态。它们可以被修改,或者在这种情况下完全删除,从而规避应用程序阻止输入的能力

将其切换到快速PDO查找,以了解用户何时发布—如果需要,请添加一个包含posts IP地址和用户名的新列—并进行验证

或者使用JavaScript查询进行30秒倒计时以防止初始请求,然后使用DB防止双击按钮


尽量远离饼干,除非你也有,否则它们太容易操纵,而且在以后的日子里;被盗。

cookies无法阻止垃圾邮件发送者。使用时间戳记录ipaddress并检查(例如)。你使它对你自己来说太复杂,对垃圾邮件发送者来说太容易克服

这是一个示例,说明了如何通过一个ipadress检查帖子的数量:

//check posts
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$q = $db->prepare("SELECT COUNT(id) as num FROM `posts` 
                   WHERE `ipaddress` = ? && time > ?");
$q->execute( array( $ip, strtotime("-30 seconds") ) );

$numberOfPosts = $q->fetch(2);
$numberOfPosts = $numberOfPosts['num'];

if( $numberOfPosts > 0 ){
 //not allowed
}

cookies不能阻止垃圾邮件发送者。使用时间戳记录ipaddress并检查(例如)。你使它对你自己来说太复杂,对垃圾邮件发送者来说太容易克服。你可以添加一个Nonce来解决重复条目问题(设置cookie之前的几个请求)。您创建一个随机数并存储它,然后检查反馈是否已使用该数。您至少应该加密cookie中的数据(例如,使用mcrypt),这样攻击者就不会轻易伪造一些有效的cookie。但正如约翰所说,cookies可能会让它变得更加困难,但它不会阻止任何垃圾邮件发送者。javascript倒计时也不会有帮助。只有服务器端的预防措施才能起作用。提交按钮上的Javascript倒计时将防止双击,或者应该防止双击。DB验证查找是确保用户没有擦洗JS的最终检查=)有人会如何擦洗JS?在我的网站上,如果不启用JavaScript,就不可能冲浪。你仍然可以在不使用网站的情况下发布到网站上的页面。
function InserirComentario(){
var uname = $('#PostComentario').val();
var postid = $('#CommentPostID').val();
var dataString = 'post_comentario='+ uname + '&comment_postid='+ postid;

    $.ajax({
        type: "POST",
        url: "sucess/comments.php",
        data: dataString,
        cache: false,
        success: function(result){
                    if (result=='Correct')
                {
                  document.getElementById("PostComentario").value = "";
                }
                    else
                {
                  $("#ComentariosFullPost").html(result);}
                },
        error: function(xhr, ajaxOptions, thrownError){
          alert("Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
        }
    });}
//check posts
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$q = $db->prepare("SELECT COUNT(id) as num FROM `posts` 
                   WHERE `ipaddress` = ? && time > ?");
$q->execute( array( $ip, strtotime("-30 seconds") ) );

$numberOfPosts = $q->fetch(2);
$numberOfPosts = $numberOfPosts['num'];

if( $numberOfPosts > 0 ){
 //not allowed
}