До вашия resetkey
колона поставете DATETIME
колона, наречена, може би, expires
.
След това, когато вмъкнете нов ключ за нулиране, вмъкнете и стойност в expires:
INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)
Точно преди да прочетете който и да е ключ за нулиране от таблицата, направете това:
DELETE FROM forgot WHERE expires < NOW()
Тогава никога няма да видите изтекъл ключ; те винаги ще бъдат изтрити, ако са изтекли.
Сега можете да изберете да направите нещо, като потърсите предоставен от потребителя ключ за нулиране. Ако е изтекъл, можете да съобщите това на потребителя:„Вашият ключ за нулиране е изтекъл.“ Но това е лоша идея ... от съображения за сигурност не трябва да помагате на потребителите да разберат защо токен за сигурност като ключ за нулиране е невалиден. Трябва просто да кажете „този ключ за нулиране не е правилен.“
Това оставя ли отворена възможността някои редове, съдържащи токен с изтекъл срок, да останат в таблицата? да. Но няма да е възможно приложението ви действително да ги прочете и използва, ако следвате процедурата за изтриване на изтекъл срок, преди да използвате каквито и да е токени. Ако сте имали причина да избягвате да съхранявате токени с изтекъл срок в таблицата, въпреки че са безполезни, бихте могли да настроите СЪБИТИЕ или някакъв друг вид редовно планирано задание, за да изпълните DELETE
изявление, което споменах.