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的栏目导航程序
Oct 09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php实现mysql事务处理的方法
Dec 25 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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
最简单的PHP程序--记数器
2006/10/09 PHP
第一节--面向对象编程
2006/11/16 PHP
php self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
Python3基础之基本运算符概述
2014/08/13 Python
Python base64编码解码实例
2015/06/21 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python如何写个俄罗斯方块
2020/11/06 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
教师产假请假条
2014/04/10 职场文书
2015年电教工作总结
2015/05/26 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang