PHP实现的激活用户注册验证邮箱功能示例


Posted in PHP onJune 06, 2017

本文实例讲述了PHP实现的激活用户注册验证邮箱功能。分享给大家供大家参考,具体如下:

这里将结合实例介绍如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功能。

注册邮箱激活流程

1、用户注册
2、插入用户数据,此时帐号未激活状态。
3、将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。
4、将构造好的激活识别码组成URL发送到用户提交的邮箱。
5、用户登录邮箱并点击URL,进行激活。
6、验证激活识别码,如果正确则激活帐号。

t_user.sql

用户信息表中字段Email很重要,它可以用来验证用户、找回密码、甚至对网站方来说可以用来收集用户信息进行Email营销,以下是用户信息表t_user的表结构:

CREATE TABLE IF NOT EXISTS `t_user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(30) NOT NULL COMMENT '用户名',
 `password` varchar(32) NOT NULL COMMENT '密码',
 `email` varchar(30) NOT NULL COMMENT '邮箱',
 `token` varchar(50) NOT NULL COMMENT '帐号激活码',
 `token_exptime` int(10) NOT NULL COMMENT '激活码有效期',
 `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态,0-未激活,1-已激活',
 `regtime` int(10) NOT NULL COMMENT '注册时间',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

HTML

以下是一个注册表单,用户可以输入注册信息,包括用户名、密码和邮箱。

<form id="reg" action="register.php" method="post">
  <p>用户名:<input type="text" class="input" name="username" id="user"></p>
  <p>密 码:<input type="password" class="input" name="password" id="pass"></p>
  <p>E-mail:<input type="text" class="input" name="email" id="email"></p>
  <p><input type="submit" class="btn" value="提交注册"></p>
</form>

register.php完成写入数据和发送邮件

首先连接数据库 和包含邮件发送类 smtp.class.php

include_once("connect.php");//连接数据库
include_once("smtp.class.php");//邮件发送类

前端验证表单我们省略了,直接看程序

$username = stripslashes(trim($_POST['username']));
$query = mysql_query("select id from t_user where username='$username'");
$num = mysql_num_rows($query);
if($num==1){
  echo '用户名已存在,请换个其他的用户名';
  exit;
}

接着我们将用户密码加密,构造激活识别码:

$password = md5(trim($_POST['password'])); //加密密码
$email = trim($_POST['email']); //邮箱
$regtime = time();
$token = md5($username.$password.$regtime); //创建用于激活识别码
$token_exptime = time()+60*60*24;//过期时间为24小时后
$sql = "insert into `t_user` (`username`,`password`,`email`,`token`,`token_exptime`,`regtime`)
values ('$username','$password','$email','$token','$token_exptime','$regtime')";
mysql_query($sql);

上述代码中,$token即构造好的激活识别码,它是由用户名、密码和当前时间组成并md5加密得来的。$token_exptime用于设置激活链接URL的过期时间,用户在这个时间段内可以激活帐号,本例设置的是24小时内激活有效。最后将这些字段插入到数据表t_user中。

当数据插入成功后,调用邮件发送类将激活信息发送给用户注册的邮箱,注意将构造好的激活识别码组成一个完整的URL作为用户点击时的激活链接,以下是详细代码:

if (mysql_insert_id()) {//写入成功,发邮件
  include_once("smtp.class.php");
  $smtpserver = "smtp.163.com"; //SMTP服务器
  $smtpserverport = 25; //SMTP服务器端口
  $smtpusermail = "hjl416148489_4@163.com"; //SMTP服务器的用户邮箱
  $smtpuser = "hjl416148489_4@163.com"; //SMTP服务器的用户帐号
  $smtppass = "hjl7233163"; //SMTP服务器的用户密码
  $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //这里面的一个true是表示使用身份验证,否则不使用身份验证.
  $emailtype = "HTML"; //信件类型,文本:text;网页:HTML
  $smtpemailto = $email;
  $smtpemailfrom = $smtpusermail;
  $emailsubject = "用户帐号激活";
  $emailbody = "亲爱的" . $username . ":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/><a href='https://3water.com/demo/active.php?verify=" . $token . "' target='_blank'>https://3water.com/demo/active.php?verify=" . $token . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/><p style='text-align:right'>-------- 三水点靠木https://3water.com敬上</p>";
  $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
  if ($rs == 1) {
    $msg = '恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!';
  } else {
    $msg = $rs;
  }
  echo $msg;
}

active.php

active.php接收提交的链接信息,获取参数verify的值,即激活识别码。将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。

include_once("connect.php");//连接数据库
$verify = stripslashes(trim($_GET['verify']));
$nowtime = time();
$query = mysql_query("select id,token_exptime from t_user where status='0' and
`token`='$verify'");
$row = mysql_fetch_array($query);
if($row){
  if($nowtime>$row['token_exptime']){ //24hour
    $msg = '您的激活有效期已过,请登录您的帐号重新发送激活邮件.';
  }else{
    mysql_query("update t_user set status=1 where id=".$row['id']);
    if(mysql_affected_rows($link)!=1) die(0);
    $msg = '激活成功!';
  }
}else{
  $msg = 'error.';
}
echo $msg;

激活成功后,发现token字段并没有用处了,您可以清空。并且status激活状态变为1了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
Email+URL的判断和自动转换函数
Oct 09 PHP
php字符串截取问题
Nov 28 PHP
php获取操作系统语言代码
Nov 04 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php实现可用于mysql,mssql,pg数据库操作类
Dec 13 PHP
php实现的日历程序
Jun 18 PHP
php生成带logo二维码方法小结
Apr 08 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 #PHP
PHP培训要多少钱
Jun 06 #PHP
Mac系统完美安装PHP7详细教程
Jun 06 #PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 #PHP
PHP PDO操作MySQL基础教程
Jun 05 #PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 #PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 #PHP
You might like
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
input框中的name和id的区别
2016/11/16 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
pip安装python库的方法总结
2019/08/02 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python如何将字符串转换为日期
2020/07/31 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
前台文员职责范本
2014/03/07 职场文书
三八节主持词
2014/03/17 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
个人借款担保书
2014/04/02 职场文书
医院信息公开实施方案
2014/05/09 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
亲属关系公证书样本
2015/01/23 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
java泛型通配符详解
2021/07/25 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript