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数据库记录的类之一
Oct 09 PHP
Smarty安装配置方法
Apr 10 PHP
开源SNS系统-ThinkSNS
May 18 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP定义字符串的四种方式详解
Feb 06 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调用Oracle存储过程
2006/10/09 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
【python】matplotlib动态显示详解
2019/04/11 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
tensorflow之并行读入数据详解
2020/02/05 Python
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
数学国培研修感言
2014/02/13 职场文书
《值日生》教学反思
2014/02/17 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
贫困证明书范文
2015/06/16 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL