Один из способов будет выглядеть так:
В вашей базе данных есть таблица, в которой вы сохраняете токены сброса и дату их создания.
Когда пользователь запрашивает сброс, сгенерируйте GUID и сохраните его в этой таблице, а затем отправьте электронное письмо пользователю, содержащему ссылку для сброса с уже включенным токеном.
Когда пользователь щелкает ссылку, вы проверяете, что токен еще не истек, а если нет, то позволяют ему сменить пароль.
После того, как пароль был изменен, либо пометьте токен как уже использованный, либо просто удалите его из таблицы.
GUID хороши для такого рода функций, они достаточно уникальны и их невозможно угадать.
НЕ используйте последовательные или короткие слова (5, 6 символов), так как их легко угадать / грубая сила.