Pero no entiendo si el usuario pierde el enlace no tienes forma de hacer nada(como vas a saber si es el usuario verdadero o el ursurpador)
Ahora si se lo pasas por 24 horas de validez, por que no mandarlo con md5(md5(time())) y a su vez guardas la fecha en que se lo enviaste.
usuario
key
date
pass
al momento de mandarle el enlace tendrias que mandarle su id de usuario(o el nombre) y el codigo encriptado.
http://www.*.com/pass_recovery.php?u...ae0196003e30ac
cuando requiera el acceso buscas la id y la coincidencia del key y comparas la fecha actual con la que gusrdaste y envisate la url al usuario. Si la fecha esta entre el rango accede y si no mala suerte.
Fácil. No se por que tanto lio. Lo unico visible va a ser la id del usuario, pero como repito de que sirve tanta seguridad si pierde la url....