sql >> Databáze >  >> RDS >> Mysql

MySQL, jak zajistit, aby hodnota vypršela?

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.



  1. Zbytek v PostgreSQL, MS SQL Server, MySQL a SQLite

  2. Jak mohu seskupit datové pole, abych získal čtvrtletní výsledky v MySQL?

  3. Simulace group_concat funkce MySQL v Microsoft SQL Server 2005?

  4. Jak mohu seskupit na spojité rozsahy