Я создаю веб-сайт 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 - скрипт, который удаляет вещи, так как это просто грязно = P.
Спасибо!
Мало
Обновление:
Чтобы уточнить: я понял, что единственный способ безопасно и безопасно выполнить эту задачу - использовать базу данных, чего и пытался избежать исходная функция. Мой вопрос о том, как таблица (или таблицы?) Должны быть структурированы. Кто-то предложил мне покончить с codePK и просто сделать код PK. Короче говоря, мой вопрос: это то, что вы делаете?