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之第八天
Oct 09 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 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中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Node.js实现文件上传
2016/07/05 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
python读取word文档的方法
2015/05/09 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python3 集合set入门基础
2020/02/10 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
教师师德师风整改措施
2014/10/24 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android