ссылка проверки по электронной почте

Когда пользователь подписывается на мою новостную рассылку через их адрес электронной почты, с помощью php, как я отправил бы им 'Ссылку Активации' по электронной почте, чтобы подтвердить, что это - их адрес электронной почты и не поддельный.

таким образом, в данный момент я имею

PHP:

<?php
 $to = "recipient@example.com";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";
 if (mail($to, $subject, $body)) {
   echo "<p>Message successfully sent!</p>";
  } else {
   echo "<p>Message delivery failed...</p>";
  }
 ?>

Я предполагаю, что изменил бы $body на это:

$body = "Please click the link to activate your email \n
http://www.activationlink.com?";

Как я сделал бы его так, чтобы, если бы пользователь нажал на ту ссылку, она добавила бы их детали к базе данных Mysql, распознающей, что они - законный подписчик?

Любая справка или предложения ценятся.Спасибо

5
задан RSM 13 July 2010 в 13:11
поделиться

6 ответов

Что мне нравится делать:

  • Генерировать уникальный, случайный ID в процессе регистрации

  • Хранить ID вместе с E-Mail адресом, полем "подтверждено" (по умолчанию: "нет") и любыми дополнительными данными в таблице базы данных

  • Рассылать E-Mail с URL, указывающим на активацию уникального ID (например. например, domain.com/activate.php?id=102939505595

  • Страница активации проверяет, существует ли уникальный ключ, и изменяет поле confirmed на yes (или 1 или любое другое).

  • Дополнительно и по желанию сохраните дату/время подтверждения, IP-адрес и агент пользователя.

11
ответ дан 18 December 2019 в 06:21
поделиться

Вставьте пользователя в таблицу с установленным флагом 'pending' (или не установленным флагом 'validated'). Они не должны иметь возможности делать что-либо, пока флаг не будет изменен. Если вы хотите быть очень внимательным, действительно поместите их в таблицу users_temp. Сгенерируйте совершенно случайный ключ и свяжите его с их идентификатором пользователя. Ссылка, которую вы отправите им по электронной почте, должна быть http://yourwebsite.com/?activate=totallyrandomkeyigeneratedearlier. Когда вы получите запрос на активацию, включите флаг valid для пользователя с соответствующим случайным ключом.

6
ответ дан 18 December 2019 в 06:21
поделиться

Сгенерируйте уникальный ID и сохраните его вместе с именем пользователя/паролем в какой-нибудь временной записи базы данных для нового пользователя.

$tmpID = uniqid();

Затем адаптируйте ссылку в тексте письма, например, так:

$body = "Please click the link to activate your email \n
http://www.activationlink.com/activateAccount?activate=".$tmpID;

Если пользователь запрашивает /activateAccount на вашем сервере, проверьте запись в базе данных на соответствие параметру $_GET['activate'] и установите пользователя активированным (если он совпадает).

Для того, чтобы убедиться, что ваша база данных не становится все больше и больше, вы можете использовать cron-job, который очищает записи старше, чем, например, 24 часа.

1
ответ дан 18 December 2019 в 06:21
поделиться

Лично я бы добавил эти данные в базу данных и имел поля с названием «активные», тогда, когда они щелкают ссылку активации, все, что вам нужно сделать, это обновить это одно поле.

У вас также может быть ссылка «Это был не я» в электронном письме, и если они нажмут на нее, вы удалите все подробности.

1
ответ дан 18 December 2019 в 06:21
поделиться

Во-первых, вам нужно добавить 2 колонки в таблицу вашей базы данных, которая содержит пользователей

Колонки должны называться active и activation_hash

Когда пользователь регистрируется, вам нужно вставить пользователя в базу данных, но установить active в 0, а activation_hash станет случайным md5 из email_адрес пользователя, unique_id(), убедитесь, что он в формате MD5, а затем сохраните его в колонке activation_hash.

В шаблоне письма добавьте ссылку для активации пользователя, например:

Активируйте свой аккаунт

Затем в файле регистрации или там, где вы указываете ссылку активации, просто получите user_id и хэш активации через $_GET и проверьте их в вашей базе данных.

если они не совпадают, попросите пользователя ввести пароль, чтобы отправить другой хэш активации. В противном случае установите колонку active в 1, чтобы остальные части вашего приложения знали, в каком статусе находится пользователь.

вот в принципе и все.

1
ответ дан 18 December 2019 в 06:21
поделиться

база данных не требуется. вы можете отправить все данные в гиперссылке, подписанной хешем

. Недавно я отвечал на аналогичный вопрос, даже со сроком действия.
хотя это была ссылка для восстановления пароля, но идея та же

$token = sha1($time.$email.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";

, весь токен будет выглядеть как одно шестнадцатеричное число, и было бы трудно угадать его значение.

при получении просто разделите и декодируйте его обратно.
Аккуратно, ИМО.

5
ответ дан 18 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: