resetkey
の横 列はDATETIME
を配置します おそらくexpires
と呼ばれる列 。
次に、新しいリセットキーを挿入するたびに、expiresにも値を挿入します。
INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)
テーブルからリセットキーを読み取る直前に、次のようにします。
DELETE FROM forgot WHERE expires < NOW()
そうすれば、期限切れのキーは表示されません。有効期限が切れると、常に消去されます。
これで、ユーザーが用意したリセットキーを検索して何かを行うことができます。有効期限が切れている場合は、「リセットキーの有効期限が切れています」とユーザーに通知できます。しかし、それは悪い考え ...セキュリティのために、リセットキーなどのセキュリティトークンが無効である理由をユーザーが理解できるようにするべきではありません。 「そのリセットキーは正しくありません」とだけ言ってください。
これにより、期限切れのトークンを含む一部の行がテーブルに残る可能性が残りますか?はい。ただし、トークンを使用する前に期限切れのものを消去する手順に従うと、アプリが実際にそれらを読み取って使用することはできません。期限切れのトークンが役に立たない場合でもテーブルに保持しないようにする理由がある場合は、EVENTまたはその他の定期的にスケジュールされたジョブを設定してDELETE
を実行できます。 私が言及した声明。