2013-09-16 69 views
1

我有我建立的PHP AJAX json登录表单。 我已经有功能,如果你已经超过5次失败的尝试,登录表单将被阻止。拒绝快速点击登录帖子

但如何拒绝没有进入用户或通过快速登录企图?

我的意思是,在点击登录按钮上的快速按钮时,在stackoverflow的登录系统中,70%的帖子到服务器被拒绝。

而且我不想在帖子之间拖延,只是在其他帖子完成之前否认帖子。

那么拒绝快速点击登录帖子的最好方法是什么?

+1

你可以使用蜜罐实际上,或睡眠功能。加会议也不是一个坏选择。 –

+0

睡眠会很糟糕,它会需要时间之间的尝试,我不想要heppen .. –

+0

然后使用蜜罐即使他们主要是反对垃圾邮件发送者,它会工作。加会话/ cookies。 –

回答

2

您可以使用以下(示例)方法,它可以在服务器端与会话一起使用,以防止人们点击太快。

现在的代码至少设置为3秒。

您可以将您用于成功发布的代码放入else条件中。

重要提示:如果您正在使用多个页面,则session_start();需要位于每个页面内,对于包含的文件也是如此。

目前设置为内部的一个文件时,使用action=""

<?php 

session_start(); 

$_SESSION['start_time'] = time(); 

if (isset($_POST['submit'])) { 

    $current_time = time(); 

    if (!empty($_POST['start_time'])) { 
     if (($current_time - $_POST['start_time']) < 3) { // 5 is number of seconds differential; change as you sit fit 
      // someone/something has submitted this form in under 5 seconds from reaching the page 
      // probably a bot 

echo "Sorry, too fast"; 

exit; 
     } 

else { 

$fname = $_POST['fname']; 
$fname = ucwords($fname); 
echo "Thank you $fname"; 

} 
    } 
} 
?> 

<form action="" method="post"> 
    <input type="hidden" name="start_time" value="<?php echo $_SESSION['start_time']; ?>"/> 

    <!-- other form fields --> 

<input type="text" name="fname"> 

<input type="submit" name="submit" value="Submit" /> 
</form> 
0

如果你要拒绝的职位上一个已经完成

我建议在会议

存储后状态值之前

因此,当发布帖子时,此状态将改变为表示正在忙碌的值

并且如果有人尝试p在完成之前,他们会从服务器收到一条消息,表明它正忙。

我不知道你是如何实现这个,但这更像是解释这个想法的伪代码。

<? 
     if($_SESSION['busy'] == true){ 
     $_SESSION['busy'] = true; 
     //PHP POST HANDLER CODE HERE 
     $_SESSION['busy'] = false; 
     //RETURN JSON FOR RESULT OF LOGIN ATTEMPT  
     } 
     else 
     { 
      //RETURN JSON FOR BUSY STATUS 
     } 

?>