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