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 10 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
php存储过程调用实例代码
Feb 03 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
PHP微信分享开发详解
Jan 14 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
php微信公众号开发之校园图书馆
Oct 20 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
星际中的相关伤害
2020/03/04 星际争霸
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
PHP游戏编程25个脚本代码
2011/02/08 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
小谈php正则提取图片地址
2014/03/27 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
Django 外键的使用方法详解
2019/07/19 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
浅析使用Python搭建http服务器
2019/10/27 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
学生打架检讨书
2014/10/20 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis