验证链接通过电子邮件

RSM*_*RSM 5 php mysql email activation

当用户使用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>";
  }
 ?>
Run Code Online (Sandbox Code Playgroud)

我想我会将$ body更改为:

$body = "Please click the link to activate your email \n
http://www.activationlink.com?";
Run Code Online (Sandbox Code Playgroud)

我如何做到这一点,如果用户点击该链接,它会将他们的详细信息添加到Mysql数据库,识别他们是合法的订阅者?

任何帮助或建议表示赞赏.谢谢

Pek*_*ica 11

我喜欢做的是:

  • 在注册过程中生成唯一的随机ID

  • 将ID与电子邮件地址,"已确认"字段(默认值:"no")以及数据库表中的任何其他数据一起存储

  • 发送带有指向激活唯一ID的URL的电子邮件(例如, domain.com/activate.php?id=102939505595

  • 激活页面检查唯一键是否存在并将confirmed字段更改为yes(1或其他).

  • 此外,还可以选择保存确认日期/时间,IP地址和用户代理.


Bor*_*lid 6

将用户插入到设置了"pending"标志的表中(或未设置"validated"标志).在更改标志之前,他们不应该做任何事情.如果你想要非常彻底,实际上将它们放入users_temp表中.生成完全随机的密钥并将其与用户ID相关联.您发送给他们的链接应该是http://yourwebsite.com/?activate=totallyrandomkeyigeneratedearlier.当您收到激活请求时,使用相应的随机密钥为用户打开有效标志.

  • 如果您在激活帐户时发送电子邮件,请考虑在激活后删除ID或检查以前是否已激活.我有一个系统,调用激活链接总是会触发电子邮件,一个用户在浏览器选项卡中打开了几天的URL.每当他重新启动浏览器并恢复标签时,他都会获得新的激活确认. (2认同)

You*_*nse 5

不需要数据库.您可以发送由哈希签名的超链接中的所有数据

即使有效期,我最近也回答了类似的问题.
虽然它是用于密码恢复链接,但想法是一样的

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

整个令牌看起来像单个十六进制数字,很难猜测它的含义.

接收后只需拆分并解码.
整洁,IMO.