美文网首页PHP经验分享PHP实战
PHP邮件激活账户的实现

PHP邮件激活账户的实现

作者: VoyagerOne | 来源:发表于2017-05-28 00:41 被阅读278次

我们在注册一个网站的账户时,通常都会收到一封含点击链接激活的邮件,而它是怎么激活我们的账户的呢,今天向大家介绍一种方法。

预备条件

我们在注册账户时,一般在用户表中会记录下我们的id、用户名、密码、邮箱或手机号,还会有一个账户激活与否的字段。我们假设它为 activation varchar(50) 注册时一般都会生成一个激活码,并且把激活码插入activation字段,我们可以使用$activation_key=bin2hex(openssl_random_pseudo_bytes(16)); 来生成,并且把它插入字段。

在链接中保存激活信息

既然我们点击了邮件里的链接后,就激活了账户,那么说明这个链接里,必然储存了激活信息。而它应该储存哪些信息呢,首先,必须有激活码,还有用户注册时的邮箱或者id,我们这里用邮箱。例如下面这个链接。

$message.="<a href="."http://www.XXXXX.com/activate.php?email=".urlencode($email)."&key=$activation_key".">Activate</a>";

$email使我们注册时的邮箱,我们用urlencode()来编码一下,将字符串用于 URL 的请求部分,$activation_key就是我们生成的激活码了,我们用服务器向这个email发送激活邮件,而这个在邮箱客户端里,会显示成一个超链接,提示你点击,点击后,我们就把email和key传送到了activate.php文件,也就是开始执行验证并激活账户了。

在activate.php中验证信息

我们使用URL请求向activate.php传入用户邮箱和激活码,现在只需要调取数据库中原有的信息进行对比,就可以验证用户了,所以我们第一步才将激活码插入用户表中,我写了一个activate.php的例子:

<?php
$link=mysqli_connect("localhost", "root", "root", "project") or die("Database Access Denied");//连接数据库
if (!isset($_GET['email'])||!isset($_GET["key"])){
    echo "<div class='alert alert-danger'>Account Activation Failed</div>";
    exit;//如果邮件链接损坏,没有传入用户激活信息,则不执行后续步骤
}
$email=$_GET['email'];
$key=$_GET['key'];
$email=mysqli_real_escape_string($link, $email);
$key=mysqli_real_escape_string($link, $key);//转义特殊字符
$sql="UPDATE users SET activation='activated' WHERE (user_email='$email' AND activation='$key') LIMIT 1";
$result=mysqli_query($link, $sql);//查询email与key匹配的数据项,并且更新activation字段到activated
if (mysqli_affected_rows($link)==1){
    echo "<div>Account Activated</div>";
    echo '<a href="index.php" type="button">Login</a>';
    echo "<br/>";
}else{
    echo "<div>Account Activation Failed Or Already Activated</div>";
}
?>

现在账户就激活了,用户在登录时,先匹配一下activation是否为activated,接着再进行后续步骤

此文仅仅只涉及这个问题的解决方法,一个完整的用户注册、激活、登录,还应该配置发送邮件的服务器

相关文章

  • PHP邮件激活账户的实现

    我们在注册一个网站的账户时,通常都会收到一封含点击链接激活的邮件,而它是怎么激活我们的账户的呢,今天向大家介绍一种...

  • 常见问题汇总

    新注册的用户在使用所有服务前需要首先激活账户。请前往注册时使用的邮箱服务器查阅激活邮件根据邮件提示激活账户。 如果...

  • PDO实例-发送邮件激活账户

    layout: posttitle: "PDO实例-发送邮件激活账户"date: 2016-05-22 16:07...

  • 夕会

    单县营业室夕会 苗主任强调最近工作重点 1 注意邮件阅览 2 紧盯业务指标 3 账户开立激活 4 有效账户提升 5...

  • laravel发送激活邮件的思路和问题

    运行环境 Mac系统 Mamp集成环境+php5.6 laravel版本号为5.1.46 发送激活邮件思路: 创建...

  • iOS testflight 使用说明

    一、告知开发者苹果手机的账户邮箱 1、通过任何形式告知即可 2、下载testflight 二、开发者发送激活邮件到...

  • go生成可以放在url中的伪随机字符串

    想让用户点击邮件中的链接后激活该邮箱作为账户,需要go这边生成可以放在url中的随机字符串: https://gi...

  • 参考

    敏捷持续集成详解jenkins+sonarqube+php自动检测&发送邮件基本实现

  • Mac/Ubuntu配置263邮箱

    Mac端自带“邮件” 邮件~添加账户图片.png 选择 其他“邮件”账户,然后填写账号和密码图片.png 填写收件...

  • 使用邮件激活LightningChart授权

    使用邮件激活授权/ LightningChartlicense 在无网络连接的情况下,可以采用邮件的方式激活授权....

网友评论

    本文标题:PHP邮件激活账户的实现

    本文链接:https://www.haomeiwen.com/subject/jijcfxtx.html