Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL come far scadere il valore?

Accanto al tuo resetkey colonna inserire un DATETIME colonna chiamata, forse, expires .

Quindi, ogni volta che inserisci una nuova chiave di ripristino, inserisci anche un valore in scade:

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

Subito prima di leggere qualsiasi chiave di ripristino dalla tabella, eseguire le operazioni seguenti:

DELETE FROM forgot WHERE expires < NOW()

Quindi non vedrai mai una chiave scaduta; verranno sempre cancellati se sono scaduti.

Ora puoi scegliere di fare qualcosa cercando una chiave di ripristino fornita dall'utente. Se è scaduto, puoi annunciarlo all'utente:"La tua chiave di ripristino è scaduta". Ma questa è una cattiva idea ... per motivi di sicurezza non dovresti aiutare gli utenti a capire perché un token di sicurezza come una chiave di ripristino non è valido. Dovresti semplicemente dire "quel tasto di ripristino non è corretto".

Questo lascia aperta la possibilità che alcune righe contenenti token scaduti persistano nella tabella? Sì. Ma non sarà possibile per la tua app leggerli e utilizzarli effettivamente se segui la procedura per cancellare quelli scaduti prima di utilizzare qualsiasi token. Se avevi un motivo per evitare di mantenere i token scaduti nella tabella anche se sono inutili, potresti impostare un EVENT o un altro tipo di lavoro regolarmente pianificato per eseguire il DELETE affermazione che ho menzionato.