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 和 MySQL 开发的 8 个技巧
Oct 09 PHP
php小偷相关截取函数备忘
Nov 28 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
php常用字符函数实例小结
Dec 29 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 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
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PDO::setAttribute讲解
2019/01/29 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
three.js实现圆柱体
2018/12/30 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
查看python下OpenCV版本的方法
2018/08/03 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
印尼旅游网站:via
2017/11/12 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
党员违纪检讨书
2014/02/18 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
党员证明模板
2015/06/19 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
高中生物教学反思
2016/02/20 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL