Als gebruikers hun wachtwoord vergeten zijn, kunnen zij via de link 'wachtwoord vergeten' een nieuw wachtwoord aanvragen. Nadat de gebruiker hun (gebruikersnaam) e-mail heeft ingevoerd checkt password_controle.php of de gebruiker bestaat en of het account actief is. Vervolgens als aan deze voorwaarde is voldaan, word er een unieke code (random)aangemaakt welke ik opsla in de mysql tabel member onder row: reset_password. Vervolgens word een e-mail gestuurd aan de gebruiker met daarin een link met de unieke code om zo doorgestuurd te worden naar reset_password.php. In reset_password.php word gekeken of de unieke code voorkomt en weet zodien met welke gebruiker het te maken heeft. Als de unieke code voorkomt kan de gebruiker een nieuw wachtwoord invoeren + herhaling om vervolgens door te kunnen naar updat_password.php. Dit script update vervolgens het wachtwoord van de gebruiker (md5) en de gebruiker krijgt de melding dat het nieuwe wachtwoord gebruikt kan worden om in te loggen.
Dit script genereert de unieke code als $reset_password + een date/time stempel op $reset_password_aanvraag.
password_controle.php
<?php
function generateRandomString ( $length = 35 ) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ;
$charactersLength = strlen ( $characters );
$randomString = '' ;
for ( $i = 0 ; $i < $length ; $i ++) {
$randomString .= $characters [ rand ( 0 , $charactersLength - 1 )];
}
return $randomString ;
}
$reset_password= generateRandomString ();
$password_herstel_aantal= $password_herstel_aantal + 1;
//========================================================================
//========================================================================
$db_link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die ('<p>fout: connect</p>');
mysql_select_db(DB_NAME, $db_link) or die ('<p>fout: select</p>');
$sql="update member set reset_password_aanvraag= NOW(),reset_password='$reset_password',password_herstel_aantal='$password_herstel_aantal'
where id='$id'" ;
mysql_query($sql, $db_link) or die("<p>fout: $sql</p>");
mysql_close($db_link) or die("<p>fout: close</p>");
//mail sturen aan gebruiker met daarin link +unieke code
.......
?>
Nu zou ik nog willen dat de unieke code maar beperkt geldig is (bv 30 minuten na aanvraag). De vraag is nu hoe ik reset_password.php kan laten kijken of de unieke code nog geldig is en dus niet ouder is dan 30 minuten op basis van de date/time stempel in row reset_password_aanvraag?
Dien ik dit in de sql te doen of moet ik vooraf een check inbouwen? en zo ja, hoe zou dit er dan uit moeten zien?
hier nog even de code van
reset_password.php
<?php
$reset_password = $_GET['key'];
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$query = "SELECT id,account_status,reset_password,status,reset_password_aanvraag
FROM member WHERE reset_password='$reset_password' and account_status='Actief' and status='Actief'";
$res=mysql_db_query("$db","$sql",$mysql_id);;
$result = mysql_query($query) or die ("Couldn't execute query.");
$num = mysql_num_rows($result);
if($num == 0)
{
echo "<center><font color='ff0000'><b>Wijzigings code is niet geldig of bestaat niet.</font></b></center>";
exit();
}
else
{
echo "<form action='update_password.php' method='POST'>";
echo "<center><b>Voer hieronder uw nieuwe wachtwoord in.</b><br>";
include("update_password_form.inc");
echo "<input type='hidden' name='reset_password' value='$reset_password'>\n";
echo "<center><p><input type='submit' value='Volgende'></form>\n";
}
?>