拒绝快速点击登录帖子

时间:2013-09-16 18:54:58

标签: php ajax json

我有一个我建立的PHP AJAX json登录表单。 我已经有了一个功能,如果你尝试失败超过5次,登录表格将被阻止。

但是如何拒绝未进入用户或通过的快速登录尝试?

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

我不想在帖子之间做出延迟,只是为了在其他帖子完成之前拒绝帖子。

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

2 个答案:

答案 0 :(得分:2)

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

目前的代码设置为最少3秒。

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

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

目前使用action=""

设置在ONE文件中工作
<?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>

答案 1 :(得分:0)

如果您想在上一个帖子完成之前拒绝发布

我建议在会话中存储帖子状态值

因此,当发布帖子时,此状态将更改为指示其正忙的值

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

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

 <?
       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
        }  

 ?>