Tengo un sistema de inicio de sesión creado en PHP. Actualmente no tiene la función "Olvidé mi contraseña" y me gustaría implementar la función.
Para esto estoy planeando hacer lo siguiente:
- Cuando el usuario envía el formulario con el correo electrónico en la página de "contraseña olvidada", se envía un correo electrónico con un token único de 50 caracteres.
- La clave única generada se almacena en la cookie de sesión usando
$_SESSION['forgotPassToken'] = "tokenof50chars";
- La página solicita que se escriba el token único enviado a la bandeja de entrada del correo electrónico del usuario.
- Cuando se ingresa el token, el código verifica si el token en la sesión y el ingresado son los mismos.
- Si es el mismo, se genera un nuevo nombre de variable de sesión
forgotPassVerified
y se redirige a una página donde el usuario puede ingresar la nueva contraseña y enviarla. - La contraseña se cambia y la sesión se destruye. Pages solicita al usuario que inicie sesión con una nueva contraseña.
Mi pregunta: ¿es seguro almacenar el token generado aleatoriamente en la sesión de PHP o debo usar la base de datos?
No me gusta hacer esto en la base de datos. Por eso me acerco a esta sesión.
Estas son las razones por las que no uso la base de datos para almacenar tokens:
- Algunos usuarios (crackers) simplemente envían el formulario con un correo electrónico. Ellos no marque la bandeja de entrada.
- Guardar espacio en la base de datos
- Reduzca el uso de la ejecución de consultas SQL.