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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
php UTF8 文件的签名问题
Oct 30 PHP
PHP SplObjectStorage使用实例
May 12 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
PHP 超级全局变量相关总结
Jun 30 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
vue组件间通信解析
2017/03/01 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
vue登录路由验证的实现
2017/12/13 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
总结Python编程中三条常用的技巧
2015/05/11 Python
python制作图片缩略图
2019/04/30 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Python中的延迟绑定原理详解
2019/10/11 Python
基于python3生成标签云代码解析
2020/02/18 Python
增大python字体的方法步骤
2020/07/05 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
普通话演讲稿
2014/09/03 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
公司更名通知函
2015/04/24 职场文书
家装电话营销开场白
2015/05/29 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书