所以我有这段代码:
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
}
if(isset($_SESSION['count'])) {
$_SESSION['count']++;
$num = 3 - $_SESSION['count'];
echo $num.' login attempts left.';
if($_SESSION['count'] < 0)
{
session_destroy("count");
unset($_SESSION["count"]);
echo 'negative :/';
}
}
if($_SESSION['count'] == 3)
{
echo 'Your session is locked for 30 minutes.';
if(!$_SESSION['timeout'])
{
$_SESSION['timeout'] = time();
}
$st = $_SESSION['timeout'] + 180; //session time is 30 minutes
if(time() < $st)
{ }
elseif(time() >= $st) {
session_destroy("count");
session_destroy("timeout");
unset($_SESSION['count']);
unset($_SESSION['timeout']);
}
}
?>
某处是错误但我无法找到它:( 我只需要在不使用数据库的情况下限制登录尝试,只需简单的会话。
你能帮助我吗?
答案 0 :(得分:0)
首先,你的第二个if
应该是我认为的另一个。
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
...
否则,第一个语句将检查是否未设置$_SESSION['count']
。
如果是这样,它会将其设置为0.然后对于第二个如果它将被设置并且$_SESSION['count']++;
将总是将此计数增加到1.因此它至少总是为1.
第二件事是你不会减少代码中任何地方的计数。 所以永远不会达到0。
如果您详细了解确切的错误,我们可以帮助您更好。
请记住,可以使用简单的方法取消会话基础身份验证。例如。通过tor访问您的网站或每次达到登录限制时使用代理。
答案 1 :(得分:0)
你认为黑客会存储会话cookie并帮助你吗?
您无法使用会话进行暴力保护。你需要申请状态。
这是我对上一个问题的回答:Block request for multiple unsuccessful logins for a period of time
答案 2 :(得分:-1)
您不需要写入文件。用户尝试登录的Foreach时间,返回false。您应该为_SESSION [&#39; count&#39;]添加+1。将该代码放入函数中。您的_SESSION [&#39; count&#39;]是全局的,所以当它的3用户将被锁定时。