Di sebelah resetkey
kolom tempatkan DATETIME
kolom yang disebut, mungkin, expires
.
Kemudian, setiap kali Anda memasukkan kunci reset baru, masukkan juga nilai ke dalam kedaluwarsa:
INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)
Tepat sebelum Anda membaca kunci reset dari tabel, lakukan ini:
DELETE FROM forgot WHERE expires < NOW()
Maka Anda tidak akan pernah melihat kunci yang kedaluwarsa; mereka akan selalu dimusnahkan jika sudah kedaluwarsa.
Sekarang, Anda dapat memilih untuk melakukan sesuatu dengan mencari kunci reset yang disediakan pengguna. Jika kedaluwarsa, Anda dapat mengumumkannya kepada pengguna:"Kunci reset Anda telah kedaluwarsa." Tapi itu ide buruk ... demi keamanan Anda tidak boleh membantu pengguna memahami mengapa token keamanan seperti kunci reset tidak valid. Anda hanya harus mengatakan "kunci reset itu tidak benar".
Apakah ini membuka kemungkinan bahwa beberapa baris yang berisi token kedaluwarsa akan tetap ada di tabel? Ya. Tetapi tidak mungkin aplikasi Anda benar-benar membacanya dan menggunakannya jika Anda mengikuti prosedur menghapus yang kedaluwarsa sebelum menggunakan token apa pun. Jika Anda memiliki alasan untuk menghindari menyimpan token yang kedaluwarsa di tabel meskipun tidak berguna, Anda dapat menyiapkan EVENT atau jenis pekerjaan lain yang dijadwalkan secara rutin untuk menjalankan DELETE
pernyataan yang saya sebutkan.