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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
PHP文件上传处理案例分析
Oct 15 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
php实现登录页面的简单实例
Sep 29 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
实践Vim配置python开发环境
2018/07/02 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python频繁写入文件时提速的方法
2019/06/26 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
置业顾问岗位职责
2014/03/02 职场文书
班级旅游计划书
2014/05/03 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书