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反弹shell实现代码
Apr 22 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHP引用返回用法示例
May 28 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 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实现文件下载更能介绍
2012/11/23 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python读取并写入mat文件的方法
2019/07/12 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2015年国培研修感言
2015/08/01 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python