sql >> Databasteknik >  >> RDS >> Mysql

MySQL hur får man värdet att förfalla?

Bredvid din resetkey kolumn placera en DATETIME kolumn som heter, kanske expires .

Sedan, när du sätter in en ny återställningsnyckel, infogar du också ett värde i expires:

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

Precis innan du läser någon återställningsnyckel från tabellen gör du så här:

DELETE FROM forgot WHERE expires < NOW()

Då kommer du aldrig att se en utgången nyckel; de kommer alltid att utplånas om de har gått ut.

Nu kan du välja att göra något med att leta upp en användarinredd återställningsnyckel. Om den har löpt ut kan du meddela att för användaren:"Din återställningsnyckel har gått ut." Men det är en dålig idé ... för säkerhets skull bör du inte hjälpa användare att förstå varför en säkerhetstoken som en återställningsnyckel är ogiltig. Du ska bara säga "den återställningsnyckeln är inte korrekt."

Lämnar detta möjligheten öppen för att vissa rader som innehåller utgången token kommer att finnas kvar i tabellen? Ja. Men det kommer inte att vara möjligt för din app att faktiskt läsa dem och använda dem om du följer proceduren för att radera de utgångna innan du använder några tokens. Om du hade en anledning att undvika att behålla utgångna tokens i tabellen trots att de är oanvändbara, kan du ställa in en HÄNDELSE eller någon annan typ av regelbundet schemalagd jobb för att köra DELETE uttalande jag nämnde.



  1. Generera testdata med Oracle PL/SQL-utvecklare

  2. MySQL SLÄPP UNIK BEGRÄNSNING

  3. ZDLRA – RMAN-20035 ogiltig hög RECID

  4. COUNT(id) kontra COUNT(*) i MySQL