Salut, am gasit pe site acum cateva luni un script ( integrat intr-unul de login/register ) in care daca greseai parola de un numar de ori nu te mai puteai loga X minute.
Am facut ca, daca gresesti parola sa adauge in baza de date numele contului respectiv ( daca nu exista ), iar daca exista numarul de incercari a contului respectiv sa creasca. Dar nu am nicio idee cum sa fac ca la X incercari sa ii afiseze un mesaj cu "Nu te mai poti loga X minute si Y secunde" si sa ii blocheze accesul de a se loga.
Ma gandeam ca daca atinge numarul maxim de incercari sa se adauge in baza de date ora,minutul,secunda actuala iar peste X minute contul sa aiba din nou acces dar mai greu cu practica.
Interzicere logare dupa X incercari
-
- Mesaje: 117
Interzicere logare dupa X incercari
MarPlo
Mesaje: 4343
Salut
1) Se poate face asa ceva cu $_SESSION.
O sesiune cam asa:
Si la fiecare logare se verifica si incrementeaza nr_logari daca timp_unix avea intervalul stabilit. Cand timp_unix trecea, nr_logari era setat 0 si timp_unix actualizat.
2) Sau cu baza de date, am facut un tabel, "user_temp" separat cu 4 coloane: nume, nri, ip, timp.
1. La fiecare logare se sterg randurile cu timp expirat.
2. Face Insert sau Update in "user_temp" pt utilizatorul care se logheaza:
3. Se face Select la user-ul care se logheaza, daca e inregistrat in tabel cu nri depasit, aplica: exit('Mesaj transmis');:
- Incearca si vezi ce iese.
1) Se poate face asa ceva cu $_SESSION.
O sesiune cam asa:
Cod: Selectaţi tot
$_SESSION['nrlogs'] =[nr_logari, timp_unix]
2) Sau cu baza de date, am facut un tabel, "user_temp" separat cu 4 coloane: nume, nri, ip, timp.
Cod: Selectaţi tot
$sql ="CREATE TABLE `user_temp` (`nume` VARCHAR(32) PRIMARY KEY, `nri` TINYINT UNSIGNED DEFAULT 0, `ip` VARCHAR(15), `dt` INT(10)) CHARACTER SET utf8 COLLATE utf8_general_ci";
Cod: Selectaţi tot
// Sterge randurile din tabelul user_temp mai vechi de 10 min
$timp_expir = time()-600;
$sql ="DELETE FROM `user_temp` WHERE `dt`<$timp_expir";
Cod: Selectaţi tot
// adauga /incrementeaza nr. incercari cu 1 si actualizeaza data
$sql ="INSERT INTO `user_temp` (`nume`, `ip`, `dt`) VALUES ('$nume', '$ip', ". time() .") ON DUPLICATE KEY UPDATE `nri`=`nri`+1";
Cod: Selectaţi tot
// face select pt. a verifica nr. incercari
$sql ="SELECT `nume`, `nri`, `dt` FROM `user_temp` WHERE `nume`='$nume' LIMIT 1";
//..efectueaza select-ul, cum stii, apoi se verifica valoarea de la nri
if($row['nri'] >3) exit('Depasire incercari d3 logare');
Stefan
Mesaje: 117
Cod: Selectaţi tot
<?php
if (empty($_POST) === false) {
$username = $_POST['username'];
$parola = $_POST['parola'];
$ip = $_SERVER['REMOTE_ADDR']; // preia ip-ul
$login = login($username,$parola);
if ($login === false) {
$erori[] = 'Combinatia username/parola nu este corecta';
[b]$data = time();
$data_expir = $data-601;
$ip = $_SERVER['REMOTE_ADDR'];
mysql_query("INSERT INTO `user_temp` (username, ip, data) VALUES ('". $_POST['username'] ."', '$ip', '$data') ON DUPLICATE KEY UPDATE `incercari`=`incercari`+1");[/b]
} else {
// verificam daca user-ul s-a logat cu succes
}
if (user_existent_res($username) === true){
$sql = mysql_query("SELECT `username`, `incercari`, `data` FROM `user_temp` WHERE `username`='". $_POST['username'] ."' LIMIT 1");
$row = mysql_fetch_assoc($sql);
//..efectueaza select-ul, cum stii, apoi se verifica valoarea de la nri
if($row['incercari'] >3) {
$timp_expir = time()-10;
$sql ="DELETE FROM `user_temp` WHERE `data`<$timp_expir";
exit('Depasire incercari d3 logare');
}
}
}
} else {
$erori[] = 'Nu au fost primite date';
}
?>
MarPlo
Mesaje: 4343
Instructiunea $sql cu DELETE randuri din tabel se executa Inainte de cea cu INSERT. Vezi ordinea data in raspunsul precedent.
Stefan
Mesaje: 117
L-am pus inainte de INSERT si tot nu se sterge, de ce ? . Dar macar s-a rezolvat problema " daca introduc datele corecte ma pot loga"
MarPlo
Mesaje: 4343
Acel $sql cu DELETE ar trebui executat /transmis la mysql nu doar adaugata instructiunea in variabila $sql.
Stefan
Mesaje: 117
Mersi, dar pentru a afisa cat timp mai are cum fac ? (descrescator) De ex. intervalul dupa care se va sterge user-ul din baza de date este de 10 min, si sa numere descrescator
Am incercat cu
Dar imi afiseaza
"Depasire incercari d3 logare 1460179830 si 24336330 minute, 30 secunde"
$timp_expir = 1460179830
$data = 1460180083
P.s
De ce se sterge doar numarul de incercari si nu tot randul ?
Am incercat cu
Cod: Selectaţi tot
$timp = floor($timp_expir/60). ' minute, '. ($timp_expir%60). ' secunde';
$erori[] = 'Depasire incercari d3 logare '. $timp_expir .' si '. $timp .'';
"Depasire incercari d3 logare 1460179830 si 24336330 minute, 30 secunde"
$timp_expir = 1460179830
$data = 1460180083
P.s
De ce se sterge doar numarul de incercari si nu tot randul ?
MarPlo
Mesaje: 4343
Ca sa afisezi cat timp mai are, se scade timpul din baza de date din timpul curent.
Cam asa, dupa ce se face select pt. a verifica nr. incercari:
- Se sterg toate randurile cu timp expirat, dar Insert-ul adauga iar rand cu numar incercari si timp resetate pt. logarea curenta.
Cam asa, dupa ce se face select pt. a verifica nr. incercari:
Cod: Selectaţi tot
$timp_ramas = time() - $row['dt'];
Subiecte similare
-
mysql Update dupa nume
PHP - MySQL - XML
Primul mesaj
Salutari,Ultimul mesaj
Incerc de ceva timp sa fac sa imi salveze informatiile jucatorului in baza de date, o data inserate vreau atunci cand gaseste din nou...
Cand se creaza tabelul in baza de date, coloana nickname trebuie sa fie de tip UNIQUE KEY .
Iar id-ul ar trebui sa fie o valoare care sa nu o mai... -
După Lună, China se îndreaptă spre Marte
Stiri Deosebite
După ce a cucerit Luna, China se îndreaptă direct spre Marte.
<img style='width:99%' src='/forum/images/china_probe_rocket.webp' alt='China... -
Arata profil pe prima pagina dupa delogare
Discutii si Intrebari Diverse
Primul mesaj
Salut,facebook are asa ceva implementatUltimul mesaj
faceprofil.png
Stii cumva unde pot gasi un script php la fel?adica dupa ce ma deloghez de pe site sa...
Salut,
Nu cunosc un astfel de script. Trebuie facut special pe scriptul de logare care-l ai, cu retinerea in baza de date sau cookie a ultimului... -
Resetare input type text dupa submit
JavaScript - jQuery - Ajax
Primul mesaj
Dupa ce dau enter sau click si a trimis mesajul nu mii se reseteaza input textul,imi trmite catre mysql fara reload incarca textul prin div dar nu...Ultimul mesaj
\Multumesc, codul din raspunsul tau functioneaza -
Ajax fade mesaj si redirect dupa un timp
JavaScript - jQuery - Ajax
Primul mesaj
Am codul asta si vreau in loc de input type=button sa fie submit, dar sa imi dea fade la fel in 5 secunde de cand apare eroarea.Ultimul mesaj
Daca schimb cu...
Am rezolvat,multumesc frumos de ajutor -
Select dupa mai multe coloane in baza de date
PHP - MySQL - XML
Primul mesaj
SalutUltimul mesaj
am si eu o baza de date zona_geografica in care am rubricile
id |nume_tara |nume_oras |id_tara |id_oras | nume_zona | id_zona | data
1 |...
Multumesc mult pentru ajutor .