Ik ben pas een half jaartje bezig met PHP en heb nu enige ervaring opgedaan. Maar ik had een vraag betreffende een inlogsysteem wat ik aan het opzetten ben. Ik wil graag een functie erin toevoegen dat als je na 3 inlogpogingen niet de juiste combinatie van username en password hebt weten in te voeren dat dan je account voor 30 minuten geblokkeerd wordt.
Alleen ik heb echt geen idee hoe ik zo'n functie op moet bouwen. Heeft iemand hier ervaring mee of weet iemand een tutorial want via google kan ik niks vinden qua tuts of scripts waar het in voorkomt.
NB, ik draai nog op een oudere versie van php, namelijk 4.4.4.
Dus dan werkt je database in principe dynamisch samen met de pagina.
Even kijken of ik het goed begrijp.
Inlogpoging 1:
1. Schrijft de IP eerst weg bij de eerste inlogpoging
2. Stuurt met een hidden field een +1 bericht naar de database in het veld AANTAL
3. Stuurt een timestamp mee?
4. Stuurt de te bannen tijd mee.
ik heb 3x foutief ingelogd, de database voegt IP toe aan geblokeerden lijst?
maar hoe zorg ik er dan voor dat dit IP weer wordt verwijderd na een bepaalde tijd?
- Je logt foutief in
- Je schrijft het ip van de gebruiker en de tijd dat er fout is ingevuld naar de database
- Bij een volgende inlogpoging (laten we zeggen binnen 10 minuten) waarbij de gebruiker met hetzelfde ip weer het wachtwoord fout invult pas je de tijd weer aan.
Staat aantal op 3 en is de tijd waarop de laatste keer foutief een wachtwoord is ingevuld dan controleer je hoe lang dat geleden is. (tip TIMEDIFF) Is dat meer dan een halfuur, begin je opnieuw met tellen en werk je de tijd weer bij. Is dat nog geen halfuur geleden dan geef je een melding dat ze een halfuur moeten wachten en pas je de tijd NIET aan.
Ja dat snap ik, maar hoe doe ik dit automatisch, het aanroepen zegmaar.
Ik dacht dat het ook zo kon:
In de tabel users 7 kolommen (even simpele versie)
ID
USERNAME
PASSWORD
IP
AANTAL (pogingen)
TIJD
BLOCK (0 of 1, 0= niet geblockt, 1=wel geblockt)
Als er na 3x foutief is ingelogd = echo bericht met u kunt de komende 15 minuten niet inloggen.
Dan vervolgend de IP invullen, aantal pogingen staat dan op 3, tijd is gewoon een timestamp en in je script doe je dan een if lus met daarin als de 15 minuten zijn verstreken de kolommen ip, aantal, tijd wissen en block veranderen naar 0 zodat er weer kan worden ingelogd.
en dan de else, weer een echo met hoeveel minuten er nog over zijn.
indien je het zo doet blokkeer je een user!
stel dat ik wil inloggen op jou account en ik doe het 3 maal foutief, dan wordt jou account geblokkeerd en kan ik je lekker pesten.
Hoi allemaal, ik heb nu de benodigde bestanden bij elkaar en ben bij het punt aangekomen dat ik ergens de functie moet gaan implementeren, ik heb alleen geen idee hoe te beginnen.
Ik maak gebruik van 5 bestanden en 1 database met 2 tabellen.
De een is tabel Users, hierin staat opgenomen ID, username, password
en de ander is Suspended, hierin is opgenomen IP, AANTAL, TIJD.
<?php
session_start(); // sessie starten
include 'connect.php'; //include database connectie
include 'functions.php'; //include functies
if (!empty($_POST)){
$query = "SELECT * FROM users
WHERE username='" . $_POST["username"] ."'
AND password='".$_POST["password"] ."'";
$result = mysql_query($query) or die ("Fout: " .mysql_error());
if (mysql_num_rows($result) > 0){
//username gevonden, registreer in sessie
$username = $_POST["username"];
$password = $_POST["password"];
session_register("username");
session_register("password");
//username en wachtwoord komt overeen, doorsturen naar desbetreffende pagina
header("Location: index2.php");
exit();
}else{
//niet de goede username gevonden of ongeldige combinatie
echo "U heeft geen geldige combinatie van username en password ingevoerd.";
show_loginbox();
}
}else{
//pagina was incorrect aangeroepen, terug naar index.php
header("Location: index.php");
}
?>
session_register? Beter kan je de $_SESSION variable gebruiken, wat je trouwens wel doet in index2.php
Verder, tabellen voor de opmaak zijn natuurlijk nooit echt netjes ;)