代码之家  ›  专栏  ›  技术社区  ›  user1372430

如果提交错误超过3次,则显示captcha

  •  5
  • user1372430  · 技术社区  · 11 年前

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

    所以在第一次、第二次和第三次我不想展示captcha,但我想展示3次错误的提交。但我不知道如何实现这一点!我试过了

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

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

    3 回复  |  直到 7 年前
        1
  •  12
  •   Amal Murali    11 年前

    在用户表中创建名为的列 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,如果是,则显示captcha:

    if ($data['failed_attempts'] >= 3) {
        // display captcha...
    }
    
        2
  •  8
  •   Ed Heal    11 年前

    captcha的全部目的是防止机器人访问您的网站(密码破解等)。

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

    所以答案是肯定的,但你破坏了captcha的整个概念。

        3
  •  1
  •   Amit Kumar Khare    11 年前

    你可以试试这种方式。。。。

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