Въпрос за Captcha

bganonymous

Registered
Как да направя така, че ако потребителя опита да се логне и въведе грешно име и парола повече от 3 пъти - да му иска captcha, докато не успее да се логне?
 
Най-бързия вариант за теб е със сесия. Ако сбърка паролата му бройш сесия + 1 и когато достигне 3 броя показваш captch-ата :)
 
devent каза:
Най-бързия вариант за теб е със сесия. Ако сбърка паролата му бройш сесия + 1 и когато достигне 3 броя показваш captch-ата :)
Малко помощ как може да стане това?
 
Там където ти е кода за неуспешен логин слагаш:
Код:
if(!isset($_SESSION['attempts']))
     $_SESSION['attempts'] = 1;
$_SESSION['attempts']++;

И после само проверяваш:
Код:
if($_SESSION['attempts'] >= 3)
{
//display captcha
}

Това е много базово само да се сетиш за какво иде реч. :)
 
bganonymous каза:
devent каза:
Най-бързия вариант за теб е със сесия. Ако сбърка паролата му бройш сесия + 1 и когато достигне 3 броя показваш captch-ата :)
Малко помощ как може да стане това?


PHP:
if(!($_SESSION['captcha'])) {
$_SESSION['captcha'] = 0;
}


if($password1 == $password) {
// логнат си
}
else {
$_SESSION['captcha']++;
}


if(isset($_SESSION['captcha']) && $_SESSION['captcha'] > 2) {
 // показваш капчата
 die;
}
 
PHP:
<?php
function login()
{
if(isset($_POST['login']))
{
$account = stripslashes($_POST['login']);
$password = stripslashes($_POST['pass']);

$check_accq = mssql_query("Select * from MEMB_INFO where memb___id='$account' and memb__pwd='$password'");
$check_acc = mssql_num_rows($check_accq);

	if ($check_acc == 0) { echo('<script language="Javascript">alert("Account or Password is invalid!");</script>');}
else
{

$_SESSION['user'] = $account;
$_SESSION['pass'] = $password;
header('Location: ?op=news');
}}
if(isset($_POST['logoutaccount']))
{
unset($_SESSION['user']);
unset($_SESSION['pass']);
header('Location: ?op=news');
}}

function check_user()
{
if(stripslashes($_GET['op']) == user & 
stripslashes($_SESSION['user']) == false or 
stripslashes($_GET['op'])) == account & 
stripslashes($_SESSION['user']) == false) { 
header('Location: ?op=news'); }

}
?>

За да не правя нова тема ще попитам тука. Как да направя това да изкарва captcha на този код? Аз се пробвах но не успях.. или да направя при 5 опита за логин да забранява достъпа за 5мин.
 
Така:

Обърни внимание на session_start();, най - вероятно си го бил забравил за това не ти е работило както трябва, но с този код би трябвало да разбереш как става това нещо.

PHP:
<?php session_start();

if(isset($_SESSION['fail']))
{
  $_SESSION['captcha_code'] = rand(0, 100);
}


function login()
{
if(isset($_POST['send']))
{
$account = stripslashes($_POST['login']);
$password = stripslashes($_POST['pass']);

$captchaPost = (isset($_POST['captcha'])) ? $_POST['captcha'] : true;

$check_accq = mssql_query("Select * from MEMB_INFO where memb___id='$account' and memb__pwd='$password'");
$check_acc = mssql_num_rows($check_accq);

$captcha = true;

if(isset($_SESSION['fail']))
 {
      if($_SESSION['fail'] > 3)
              {
                      $captcha = $_SESSION['captcha_code'];
              }
  } 

               
                      
               


 if($captcha != $captchaPost)
{
             
$error['captcha'] = 'Wrong captcha';

}       


elseif ($check_acc == 0) {

if(!isset($_SESSION['fail'])) {
$_SESSION['fail'] = 1;
} else {
$_SESSION['fail']++;
}

 echo('<script language="Javascript">alert("Account or Password is invalid!");</script>');}
else
{



if(isset($_SESSION['fail']))
{
unset($_SESSION['captcha_code']);
unset($_SESSION['fail']);
}

$_SESSION['user'] = $account;
$_SESSION['pass'] = $password;
header('Location: ?op=news');
}}
if(isset($_POST['logoutaccount']))
{
unset($_SESSION['user']);
unset($_SESSION['pass']);
header('Location: ?op=news');
}}

function check_user()
{
if(stripslashes($_GET['op']) == user & 
stripslashes($_SESSION['user']) == false or 
stripslashes($_GET['op'])) == account & 
stripslashes($_SESSION['user']) == false) { 
header('Location: ?op=news'); }

}
?>


<form action="" method="post"> 

<?php

if(isset($_SESSION['fail']))
          {
              if($_SESSION['fail'] > 3) {
                      echo $_SESSION['captcha_code'];
                      echo '<br />';
                      echo '<input type="text" name="captcha" />';
               } 
          }

if(isset($error['captcha'])) {echo $error['captcha'];}

 ?>

<input type="text" name="login" />
<input type="password" name="pass" />

<input type="submit" name="send" value=" Login " />

</form>
 

Back
Горе