sql >> Base de Datos >  >> RDS >> Mysql

MySQL cómo hacer que el valor caduque?

Junto a tu resetkey columna coloque un DATETIME columna llamada, tal vez, expires .

Luego, cada vez que inserte una nueva clave de reinicio, también inserte un valor en expira:

INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)

Justo antes de leer cualquier clave de reinicio de la tabla, haga esto:

DELETE FROM forgot WHERE expires < NOW()

Entonces nunca verá una clave caducada; siempre se eliminarán si han expirado.

Ahora, puede optar por hacer algo buscando una clave de reinicio proporcionada por el usuario. Si ha caducado, podría anunciarlo al usuario:"Su clave de reinicio ha caducado". Pero eso es una mala idea ... por razones de seguridad, no debe ayudar a los usuarios a comprender por qué un token de seguridad, como una clave de reinicio, no es válido. Solo debe decir "esa tecla de reinicio no es correcta".

¿Esto deja abierta la posibilidad de que algunas filas que contienen token caducado persistan en la tabla? Sí. Pero no será posible que su aplicación los lea y los use si sigue el procedimiento de borrar los caducados antes de usar cualquier token. Si tiene una razón para evitar mantener tokens vencidos en la tabla aunque sean inútiles, puede configurar un EVENTO o algún otro tipo de trabajo programado regularmente para ejecutar DELETE declaración que mencioné.