PHP用户注册邮件激活账户的实现代码

我们在注册一个网站的账户时,通常都会收到一封含点击链接激活的邮件,而它是怎么激活我们的账户的呢,今天向大家介绍一种方法。

预备条件

我们在注册账户时,一般在用户表中会记录下我们的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,接着再进行后续步骤

此文仅仅只涉及这个问题的解决方法,一个完整的用户注册、激活、登录,还应该配置发送邮件的服务器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • phpMyAdmin 链接表的附加功能尚未激活的问题

    安装phpMyAdmin的时候我还是没有手动配置config文件,而是使用了它的setup功能. 除了 服务器名称 和 认证方式 以外都使用了默认值. 服务器名称自己随便输入了一个,认证方式修改成了http. 另外PMA数据库一页点了文本框后面的笔,把默认值填进去了. (这时候我已经创建了控制用户,而且把用户名和密码输入进去了.创建的方法我会在后面讲) 保存设置后,输入MySQL的root用户名和密码,打开phpMyAdmin的主画面后,出现了如下的错误 点了 请点击此处之后 看到的画面如下 解

  • 用Php编写注册后Email激活验证的实例代码

    总共需两个页面,register.php 和 verify.php 1. 用户注册表格 register.php 复制代码 代码如下: <html> <body> <form action="register.php" method="post" name="register"> 用户名:<input type="text" name="username" />

  • PHP+jQuery 注册模块的改进(二):邮箱激活第1/2页

    接<PHP+jQuery 注册模块的改进之一>继续修改: ①在注册成功后返回登录邮件页面( maillogin.php ),在页面中用户可以点击链接跳转到自己注册邮箱的登录页面,可以再次发送激活链接: ②给激活链接设置有效期,过了有效期点击激活连接,会跳转页面让用户选择再次发送邮件或者返回注册页:再次发送邮件后,进邮箱点击链接激活: ③点击重新发送激活连接,不跳转页面,在当前页无刷新弹出通知:已重新发送链接,几秒钟之后通知消失: ④点击更换收件邮箱,跳转至注册页 1.点击邮箱链接跳转至相应邮箱

  • phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)

    从多方查找资源并测试终于解决了问题,特记录下.其实如果在安装的时候,正确的安装,就不会出现下面的信息了. 如在Linux下安装,提示密码的时候,输入Root账号的密码就不会出现这个问题了! phpmyadmin一直有"链接表的附加功能尚未激活"的问题,登陆phpmyadmin后,会在底部显示"链接表的附加功能尚未激活.要查出原因,请点击此处."的提示.关于这个问题一直都没有着手去解决,直到今天,算是无聊的缘故吧! 如果你够细心的话,相信你也可以在你的phpmyadm

  • PHP用户注册邮件激活账户的实现代码

    我们在注册一个网站的账户时,通常都会收到一封含点击链接激活的邮件,而它是怎么激活我们的账户的呢,今天向大家介绍一种方法. 预备条件 我们在注册账户时,一般在用户表中会记录下我们的id.用户名.密码.邮箱或手机号,还会有一个账户激活与否的字段.我们假设它为 activation varchar(50) 注册时一般都会生成一个激活码,并且把激活码插入activation字段,我们可以使用$activation_key=bin2hex(openssl_random_pseudo_bytes(16));

  • java邮件发送简单实现代码

    本文实例为大家分享了java邮件发送的具体代码,供大家参考,具体内容如下 我用的是maven项目,前台页码不多说,自己传邮箱地址进来就行. 只需要一个类实现,直接复制就可以 package com.mail; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import

  • Python通过Django实现用户注册和邮箱验证功能代码

    本文主要向大家分享了Python编程中通过Django模块实现用户注册以及邮箱验证功能的简单介绍及代码实现,具体如下. 用户注册: 类似于用户登陆,同样在users.views.py中添加RegisterView(View)类,其中对表单的get和post作出处理. 如果是get方法,重新返回register页面让用户进行填写. def get(self, request): register_form = RegisterForm() return render(request, "regis

  • SpringBoot中发送QQ邮件功能的实现代码

    本文是vhr系列的第十二篇,项目地址 https://github.com/lenve/vhr 邮件发送也是一个老生常谈的问题了,代码虽然简单,但是许多小伙伴对过程不太理解,所以还是打算和各位小伙伴聊聊这个话题. 邮件协议 我们经常会听到各种各样的邮件协议,比如SMTP.POP3.IMAP,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题. SMTP是一个基于TCP/IP的应用层协议,江湖地位有点类似于HTTP,SMTP服务器默认监听的端口号为25.看到这里,小伙伴们可能会想到既然S

  • SpringBoot实现邮件发送的示例代码

    工具类: package com.lhh.utils; import com.lhh.bean.EmailEntity; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * @author liuhuanhuan * @version 1.0 * @date 2021/4

  • Spring Boot实现邮件注册功能示例代码

    注册流程 1.[前端] 用户在注册页面提交注册信息: 2.[后端] 校验用户提交的参数,有误直接返回错误信息,无误向下执行: 3.[后端] 随机生成一个ID,将ID作为key,用户信息作为value,存入redis,设置时长: 4.[后端] 生成激活链接,通过邮件系统发送邮件到用户邮箱 5.[前端] 用户点击上图的"确认注册": 6.[后端] 校验value是否过期,校验邮箱是否已经注册,没有则保存用户信息到数据库,提示用户已经注册成功: 功能实现(逆向分析) 1.先看看邮件发送的实现

  • PHP邮件群发机实现代码

    原理: 第一:申请大量的邮箱帐号 腾讯的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服务的 第二:收集你要发送邮件的邮件列表 第三:遍历邮件列表,每一个邮件发送邮件 第四:用linux下定时脚本后台运行 我跑了两天 哈哈 ,因为为了尽可能的保证每一个都发送成功 原理是很简单,但是其中还是遇到很多的问题. 第一:邮件失败的问题,我这里采用两个方式解决,第一把大量的那些邮箱帐号依次去发送,直到成功.然后每次发送500封邮件 后把发送邮箱列表随机打散(避免一个持续失败). 我用的是p

  • PHPMailer邮件发送的实现代码

    本机环境:LAMP(ubuntu12.10); SMTP服务器用的是stmp.163.com.刚开始对于这个还是蛋疼的,最先使用的是stmp.qq.com结果发的邮件都被腾讯当成垃圾邮件处理了发不出去, 怎么该内容都没过.然后我改成了stmp.gmail.com,然后打开谷歌邮箱的POP服务,但总无法验证成功.最后还是注册一个163,运行代码就成功了. 无痛苦,无压力~~ 代码如下: 复制代码 代码如下: <?php require("PHPMailer/class.phpmailer.p

  • laravel邮件发送的实现代码示例

    laravel自带SwiftMailer库,集成了多种邮件API,可以很方便的实现邮件的发送.在本教程中使用到的是SMTP(Simple Message Transfer Protocol)简单邮件传输协议,通常理解为邮件发送服务器. 以126邮箱为例 使用126邮箱的话,需要开启POP3和SMTP服务(设置->POP3/SMTP/IMAP) 常见错误编码 https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e

  • SpringBoot集成RabbitMQ实现用户注册的示例代码

    上一篇已经介绍了什么是rabbitmq以及和springboot集成方法,也介绍了springboot集成邮件的方式,不了解的可以先看以前写的文章. 三者集成 上一篇springboot集成邮件注册的已经介绍了,本篇文章基于这个介绍,我们只需要修改下面几处即可完成3者集成. 实现步骤 添加rabbitmq依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

随机推荐