Лучшие практики для кодов подтверждения по электронной почте
я создаю веб-сайт PHP, который включает в себя регистрацию пользователей, и ямне интересно о лучших практиках дляПодтверждение электонной почты" коды.
Новые пользователи должны подтвердить свои адреса электронной почты - я делаю это, генерируя код и отправляя его пользователю по электронной почте, который он затем может использовать для активации своей учетной записи. Вместо того, чтобы хранить этот ключ в базе данных, ям с помощью удобного небольшого обходного пути: код является результатом:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
Где $ timestamp относится к времени создания пользователя. В целом я был очень доволен этим, но потом я задумался, достаточно ли это безопасно? А как насчет возможности столкновения? И мне также нужно сгенерировать коды для сброса пароля и т. Д. Если бы я использовал подобную методологию, коллизия могла бы привести к тому, что один пользователь непреднамеренно сбросил другого пользователя ».пароль. И этоничего хорошего.
Так как ты делаешь эти вещи? Моими мыслями была таблица следующего формата:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
Куда 'тип' будет 1, 2 или 3 означаетактивация ","изменение электронной почты " или же "восстановление пароля", Это хороший способ сделать это? У тебя есть способ получше?
Используя метод, аналогичный описанному выше, могу ли я автоматически удалить что-либо старше двух дней без использования cron-jobs? Мой хост (nearfreespeech.net) не поддерживает их. Если это вообще возможно, яХотелось бы избежать работы cron на внешнем хосте, который wget 's скрипт, который удаляет вещи, какпросто грязно = P.
Спасибо!
скуловая кость
Обновить:
Чтобы уточнить: яМы поняли, что единственный способ безопасно и безопасно выполнить эту задачу - использовать базу данных, чего и пытался избежать исходная функция. Мой вопрос о том, как таблица (или таблицы?) Должны быть структурированы. Кто-то предложил мне покончить с codePK и просто сделать код PK. Короче говоря, мой вопрос: это то, что вы делаете?