如何验证访问者在我的网站上注册的时间,他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击这些链接来证明他们的会员资格,如何做到这一点?
答案 0 :(得分:5)
在高层次上,您想要做的大致如下:
至于如何逐步执行此操作tutorials abound。
答案 1 :(得分:2)
创建一个唯一的随机数,并将其与用户ID一起存储在一个表中。通过电子邮件向他们发送消息,其中包含指向接受随机数作为输入的页面的链接。如果他们有正确的随机数,请将其帐户标记为有效。
答案 2 :(得分:1)
如果您使用的是PHP 5.2或更高版本,则一个选项是filter_var函数...
if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE)
答案 3 :(得分:1)
采用以下方法。
用户注册。 数据库将更新其详细信息,并为活动/非活动添加标记。 电子邮件通过链接发送到注册的电子邮件地址 链接转到可以确认电子邮件地址有效的页面并更新数据库。
不知道你在做什么环境并做出一些假设,这大致就是你如何去做的。
我假设您已经持续进行用户注册? 您对以下内容将要生成某种类型的哈希,并将其与用户/成员详细信息一起插入...
$hash = substr(md5(uniqid()), 0, 5);
您是否有信心构建电子邮件视图并使用phpMailer或类似方式发送? 如果是这样的话,请使用一个链接,当它被击中时,将获取member_id和member_hash,以及类似下面的内容... 我在这里再次使用PDO,有很多方法可以做你想做的事情......无论什么对你最好。
// PDO Instance
$pdo = $this->actionServer->getDataSource('PDO');
$findMember = $pdo->prepare('SELECT * FROM member WHERE member.member_id = :memberId AND member.member_hash = :memberHash AND hidden = 1');
$findMember->bindParam(':memberId', $memberId);
$findMember->bindParam(':memberHash', $memberHash);
$findMember->execute();
$findMemberResult = $findMember->fetch(PDO::FETCH_ASSOC);
if (empty($findMemberResult)) {
$this->log->error('Could not find member based on ID and Hash combination');
throw new HTTPException(404);
}
/**
* Could use a method like below to approve
*/
protected function approveMember($memberId, $pdo) {
$sql = 'UPDATE member SET member.hidden = 0 WHERE member.member_id = :memberId';
$updateMember = $pdo->prepare($sql);
$updateMember->bindParam(':memberId', $memberId);
$updateMember->execute();
}
希望这有帮助!
Cheerio
答案 4 :(得分:-2)
我在某个时间点做了类似的事情,但是我没有验证用户是否存在,我确实需要验证格式以及它是否是真实域名(scrub none@none.com) 。您可以查看我的功能并从那里开始。
//Verify formatting
function verify_email($email){
if(!preg_match('/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/',$email)){
return false;
} else {
return $email;
}
}
//Verify MX records exist
function verify_email_dns($email){
// This will split the email into its front
// and back (the domain) portions
list($name, $domain) = split('@',$email);
if(!(checkdnsrr($domain,'MX') || checkdnsrr($domain, 'A'))){
// No MX record found
return false;
} else {
// MX record found, return email
return true;
}
}
您也可以查看stack question