PHP用户注册邮件激活账户的实现代码


Posted in PHP onMay 31, 2017

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

预备条件

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

在链接中保存激活信息

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

$message.="<a href="." rel="external nofollow" 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" rel="external nofollow" type="button">Login</a>';
  echo "<br/>";
}else{
  echo "<div>Account Activation Failed Or Already Activated</div>";
}
?>

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
php自定义分页类完整实例
Dec 25 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
10个值得深思的PHP面试题
Nov 14 PHP
php smtp实现发送邮件功能
Jun 22 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP7修改的函数
Mar 09 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 #PHP
PHP简单实现合并2个数字键数组值的方法
May 30 #PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 #PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 #PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 #PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 #PHP
PHP实现的简单AES加密解密算法实例
May 29 #PHP
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
深入PHP中的HashTable结构详解
2013/06/13 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
javascript常用函数(2)
2015/11/05 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python使用Matplotlib画饼图
2018/09/25 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python标准库OS模块详解
2020/03/10 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
总经理助理的八要求
2013/11/12 职场文书
婚前协议书怎么写
2014/04/15 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js