Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL, wie man den Wert verfallen lässt?

Neben Ihrem resetkey Platzieren Sie in der Spalte DATETIME Spalte mit dem Namen expires .

Fügen Sie dann immer dann, wenn Sie einen neuen Reset-Schlüssel einfügen, auch einen Wert in expires:

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

Tun Sie Folgendes, bevor Sie einen Reset-Schlüssel aus der Tabelle ablesen:

DELETE FROM forgot WHERE expires < NOW()

Dann sehen Sie nie einen abgelaufenen Schlüssel; Sie werden immer gelöscht, wenn sie abgelaufen sind.

Jetzt könnten Sie etwas tun, indem Sie einen vom Benutzer bereitgestellten Reset-Schlüssel suchen. Wenn er abgelaufen ist, könnten Sie das dem Benutzer mitteilen:„Ihr Reset-Schlüssel ist abgelaufen.“ Aber das ist eine schlechte Idee ... aus Sicherheitsgründen sollten Sie Benutzern nicht helfen zu verstehen, warum ein Sicherheitstoken wie ein Reset-Schlüssel ungültig ist. Sie sollten einfach sagen "Dieser Reset-Schlüssel ist nicht korrekt."

Lässt dies die Möglichkeit offen, dass einige Zeilen mit abgelaufenem Token in der Tabelle bestehen bleiben? Ja. Aber es wird Ihrer App nicht möglich sein, sie tatsächlich zu lesen und zu verwenden, wenn Sie das Verfahren zum Löschen der abgelaufenen Token befolgen, bevor Sie Token verwenden. Wenn Sie einen Grund haben, abgelaufene Token nicht in der Tabelle zu behalten, obwohl sie nutzlos sind, können Sie ein EVENT oder eine andere Art von regelmäßig geplantem Job einrichten, um DELETE auszuführen Aussage, die ich erwähnt habe.