Vedle vašeho resetkey
umístěte do sloupce DATETIME
sloupec s názvem, možná, expires
.
Poté, kdykoli vložíte nový resetovací klíč, vložte také hodnotu do expires:
INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)
Těsně předtím, než si přečtete jakýkoli resetovací klíč z tabulky, udělejte toto:
DELETE FROM forgot WHERE expires < NOW()
Pak už nikdy neuvidíte klíč, jehož platnost vypršela; budou vždy vymazány, pokud jejich platnost vypršela.
Nyní se můžete rozhodnout něco udělat s vyhledáním uživatelem dodaného resetovacího klíče. Pokud jeho platnost vypršela, můžete to oznámit uživateli:"Platnost vašeho resetovacího klíče vypršela." Ale to je špatný nápad ... kvůli bezpečnosti byste neměli uživatelům pomáhat pochopit, proč je bezpečnostní token, jako je resetovací klíč, neplatný. Měli byste jen říct „ten resetovací klíč není správný.“
Ponechává to otevřenou možnost, že některé řádky obsahující token s vypršenou platností zůstanou v tabulce? Ano. Vaše aplikace je však nebude moci skutečně číst a používat, pokud před použitím jakýchkoli tokenů dodržíte postup vymazání těch, jejichž platnost vypršela. Pokud jste měli důvod vyhýbat se ponechání tokenů s prošlou platností v tabulce, i když jsou k ničemu, můžete nastavit EVENT nebo jiný druh pravidelně naplánované úlohy ke spuštění DELETE
prohlášení, které jsem zmínil.