potresti fare così
temp_pass
codice:
+-----+-----------+--------------------+----------+
| id  | id utente | codice di conferma | scadenza |
+-----+-----------+--------------------+----------+
il resto dei dati (username ed email) sono nella tabella utenti

quando un utente ha dimenticato la password, digita il suo username in un form

lo script prende l'email associata all'username, genera un codice e lo invia

l'utente va su un altro modulo simile a quello di login e da qui digita username e codice di conferma (potresti anche farlo con un link)

lo script verifica il codice di conferma associato all'username sulla tabella temporanea. Se è corretto e non è scaduto, invia all'indirizzo email la nuova password e modifica l'esistente sulla tabella utenti