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中Session的概念
Oct 09 PHP
php date()日期时间函数详解
May 16 PHP
php模板函数 正则实现代码
Oct 15 PHP
全面了解PHP中的全局变量
Jun 17 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
php变量与字符串的增删改查操作示例
May 07 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按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
让焦点自动跳转
2006/07/01 Javascript
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Python中max函数用法实例分析
2015/07/17 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
加拿大留学自荐信
2014/01/28 职场文书
优秀团队获奖感言
2014/02/19 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
安全生产月标语
2014/10/07 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
Python实现信息管理系统
2022/06/05 Python
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS
python中使用redis用法详解
2022/12/24 Redis