Я думаю, что вы можете сделать это без сохранения состояния, то есть без таблицы базы данных, которую предлагают другие.
- Как предполагает mtnygard, создайте хэш SHA-1 для параметров URL и секретной строки соли.
- Добавьте значение хеша в качестве обязательного параметра в URL.
- Отправьте URL в письме.
Когда пользователь нажимает на URL:
- Проверьте целостность URL-адреса, снова рассчитав хэш и сравнив вычисленное значение с значением в URL.
Пока вы никогда не разглашаете свою секретную строку соли, никто не сможет подделать запросы к системе. Однако, в отличие от других предложений, это не мешает воспроизвести старый URL. Это может или не может быть желательным, в зависимости от вашей ситуации.