如果超过3个错误提交,请显示验证码

时间:2014-02-15 08:27:47

标签: php captcha

在我网站的登录页面中,如果用户想要进入用户区域,则必须正确输入用户名,密码和验证码。但是没有人,首先是我,不喜欢验证码。另一方面,你知道,网络安全和垃圾邮件的事实。

所以在第一次,第二次和第三次我不想显示验证码但是超过3次错误的提交我想要显示它。但我对如何实现这个没有任何想法!我试过了

$_SESSION['wrong_submit'] = 1; 
$_SESSION['wrong_submit']++;

当然不是。请你能帮帮我,我该怎么做?

3 个答案:

答案 0 :(得分:12)

在名为login_attempts的用户表中创建一个列。每次登录尝试失败时,该列都会递增,并在成功登录时重置。

基本结构如下:

+-----------+------+------+
|  user_id  |  ip  | date |
+-----------+------+------+

要检查登录尝试次数,您可以使用如下查询:

SELECT count(ip) AS failed_attempts
FROM login_attempts
WHERE ip = $ip
  AND date < (NOW - INTERVAL 24 HOUR)

现在,在您的PHP代码中,您可以检查该值是否大于或等于3,并显示验证码,如果是这样:

if ($data['failed_attempts'] >= 3) {
    // display captcha...
}

答案 1 :(得分:5)

验证码的重点是防止机器人访问您的网站(密码破解等)。

会话使用Cookie。因此,为了阻止您的系统,机器人所要做的就是不发送cookie,因此您的服务器认为这是第一次登录尝试,因此不需要验证码。这将使机器人能够尝试多次。

所以答案是肯定会通过会议,但你破坏了验证码的整个想法。

答案 2 :(得分:1)

你可以这样试试......

<?php 
    $_SESSION['wrong_pword_count']=0;

    if($stored_password != $provided_password){
        if($_SESSION['wrong_pword_count']<3){
            $_SESSION['wrong_pword_count'] = $_SESSION['wrong_pword_count']+1;
        }
    } else {
        $_SESSION['wrong_pword_count']=0;

    }

    if($_SESSION['wrong_pword_count']>=3){
        echo "Show captcha here";
    }