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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
PHP实现GIF图片验证码
Nov 04 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 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
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python集合类型用法分析
2015/04/08 Python
常用python编程模板汇总
2016/02/12 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
Python列表元素常见操作简单示例
2019/10/25 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
主持人演讲稿范文
2013/12/28 职场文书
超市促销活动方案
2014/03/05 职场文书
读书小明星事迹材料
2014/05/03 职场文书
十周年庆典策划方案
2014/06/03 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL