在我网站的登录页面中,如果用户想要进入用户区域,则必须正确输入用户名,密码和验证码。但是没有人,首先是我,不喜欢验证码。另一方面,你知道,网络安全和垃圾邮件的事实。
所以在第一次,第二次和第三次我不想显示验证码但是超过3次错误的提交我想要显示它。但我对如何实现这个没有任何想法!我试过了
$_SESSION['wrong_submit'] = 1;
$_SESSION['wrong_submit']++;
当然不是。请你能帮帮我,我该怎么做?
答案 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";
}