He intentado hacer el pseudo-código, a ver que os parece:
Preliminar...
PALABRASECRETA="s3cr3t"
((user_id + username) en MD5 + palabrasecreta) en MD5, el resultado en un campo llamado HASH en la BD
El usuario visita la web.
>> Se crea un token de sesión mediante
Código de la cabecera de la web:
$token = md5(uniqid(rand(), true));
$_SESSION['TokenSesion'] = $token; El usuario se logea y marca la casilla "No cerrar sesión"
Código HTML:
Ver original<form method="post" action="/libs/login.php"> <li><input id="user" type="text" name="user" tabindex="1" onblur="if(this.value=='') this.value='Usuario';" onfocus="if(this.value=='Usuario') this.value='';" value="Usuario"/></li> <li><input id="passw1" type="text" name="pass1" tabindex="2" style="display: inline;" value="Contraseña" onfocus="this.style.display = 'none'; this.form.pass2.style.display = 'inline'; this.form.pass2.focus();" /></li> <li><input id="passw2" type="password" name="pass2" tabindex="2" style="display: none;" onblur="if(this.value == '') {this.style.display = 'none'; this.form.pass1.style.display = 'inline';}" /></li> <input type="hidden" name="token" value="<?php echo $token; ?>">
<input name="entrar" value="Entrar" type="submit"/></span></li> <li><input type="checkbox" id="recordar" tabindex="3" name="recordar" /><label for="recordar">No cerrar sesión
</label></li> <li><a href="/registro/recuperar_pass.php">¿Olvidaste tu contraseña?
</a></li>
>> Se verifica que los datos introducidos por el usuario (user y pass sean correctos y que el token que está en un campo hidden coincide con la sesion del servidor)
>> Si todo es correcto, se crea esta cookie llamada "recuerdame"
>> La cookie "recuerdame" contiene el USER_ID + USERNAME encriptado en md5
El usuario vuelve a visitar la web
>> Se comprueba que exista la cookie "recuerdame"
>> Se lee los datos de la cookie y se le concatena al valor de la cookie la PALABRASECRETA, se encripta todo en MD5 y se compara con el campo de la base de datos.
>> Si coincide este valor el usuario está autenticado.
¿Es correcto?
Muchas gracias de antemano!