我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号。激活成功后才能正常使用会员功能。

查看演示 下载源码

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

业务流程

1、用户提交注册信息。

2、写入数据库,此时帐号状态未激活。

3、将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。

4、将构造好的激活识别码组成URL发送到用户提交的邮箱。

5、用户登录邮箱并点击URL,进行激活。

6、验证激活识别码,如果正确则激活帐号。

准备数据表

用户信息表中字段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> 

对于用户的输入要进行必要的前端验证,关于表单验证功能,建议您参考本站文章:实例讲解表单验证插件Validation的应用,本文对前端验证代码略过,另外其实页面中还应该有个要求用户重复输入密码的输入框,一时偷懒就此略过。

register.php

用户将注册信息提交到register.php进行处理。register.php需要完成写入数据和发送邮件两大功能。

首先包含必要的两个文件,connect.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()){     $smtpserver = ""; //SMTP服务器,如:smtp.163.com     $smtpserverport = 25; //SMTP服务器端口,一般为25     $smtpusermail = ""; //SMTP服务器的用户邮箱,如xxx@163.com     $smtpuser = ""; //SMTP服务器的用户帐号xxx@163.com     $smtppass = ""; //SMTP服务器的用户密码     $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //实例化邮件类     $emailtype = "HTML"; //信件类型,文本:text;网页:HTML     $smtpemailto = $email; //接收邮件方,本例为注册用户的Email     $smtpemailfrom = $smtpusermail; //发送邮件方,如xxx@163.com     $emailsubject = "用户帐号激活";//邮件标题     //邮件主体内容     $emailbody = "亲爱的".$username.":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/>     <a href='http://www.helloweba.com/demo/register/active.php?verify=".$token."' target= '_blank'>http://www.helloweba.com/demo/register/active.php?verify=".$token."</a><br/>     如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。";     //发送邮件     $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);     if($rs==1){         $msg = '恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!';         }else{         $msg = $rs;         } } echo $msg; 

还有一个相当好用且强大的邮件发送类分享个大家:使用PHPMailer发送带附件并支持HTML内容的邮件,直接可以用哦。

active.php

如果不出意外,您注册帐号时填写的Email将收到一封helloweba发送的邮件,这个时候您直接点击激活链接,交由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字段并没有用处了,您可以清空。接下来我们会讲解用户找回密码的功能,也要用到邮箱验证,敬请关注。

本文来源于helloweba.com 原文链接:http://www.helloweba.com/view-blog-228.html

PHP用户注册邮箱验证激活帐号相关推荐

  1. php正则邮箱验证,两种PHP用户注册邮箱验证正则表达式方法

    一般我们在WEB端新注册或者登陆账户的时候,对于字段的验证不仅仅是需要验证其是否为空或者长度,有些特殊的字段,比如EMAIL邮箱我们需要验证是不是邮箱的格式,比如是都带有@符号等.刚才在练习PHP程序 ...

  2. 使用正则表达式验证银行帐号

    银行帐号是在任何特定银行开设账户后分配给账户持有人的唯一编号.从技术上讲,我们可以将银行帐号视为主键.银行帐号使我们能够进行借记.贷记和其他交易.根据 RBI 指南,银行帐号具有独特的结构.Accou ...

  3. ThinkPHP 3.2 用户注册邮箱验证帐号找回密码

    一.前言 当然现在有的网站也有手机短信的方式找回密码,原理就是通过发送验证码来验明正身,和发送邮件验证一样,最终还是要通过重置密码来完成找回密码的流程. 本文将使用PHP+Mysql+jQuery来实 ...

  4. Java实现QQ邮箱验证激活 Java简单发送邮箱

    Java简单发送邮箱 1.首先要去qq邮箱 设置–账户–把所有服务都开启 (记住其中任意一个授权码就OK了) 如下图: 2. 导入jar包 创建测试类 (复制即可) 如下: package testE ...

  5. Ajax实现简单的登录验证与帐号注册

    上一篇博客介绍了Ajax的GET和POST方法以及上传文件的进度条展示,这篇博客将介绍一个简单的登录与注册功能的实现 设计HTML 这个是即将成为我毕业设计的一个网站, 在导航栏我添加了两个注册和登录 ...

  6. .NET用户注册邮箱验证

    这是一次偶然的机会,跟公司的业务聊了下他们大概的需求,其中有一点用户需要邮箱验证去注册自己的账户:对于还没有接触过这块的我来说,产生了浓厚的兴趣,于是乎研究了下.想到了两种方法:一种是程序产生比较简单 ...

  7. 解决利用smtplip自动发送邮件时,qq邮箱“您的帐号存在安全隐患,建议修改密码后尝试重新发送.”的问题

    遇到此问题的场景:利用smtplib自动发送邮件,重复发送多次,导致qq邮箱每次打开都有此提示.按照提示修改密码也无法关闭这个提示. 解决方法: 1.打开qq邮箱,进入"帐户→设置独立密码& ...

  8. Java案例-用户注册邮箱验证将邮箱激活码存入redis功能实现

    <–start–> 用户注册时,要求用户填写注册邮箱,然后后台向用户的注册邮箱中发送绑定邮件,并将激活码保存到redis中. 手机短信验证码因为时效期短,只需要将短信验证码存储到sessi ...

  9. Java案例-用户注册邮箱绑定激活功能实现

    <–start–> 需求描述:当客户打开收到邮箱激活码的邮件,点击激活链接,正确填写激活码后就会完成邮箱激活的步骤. 在后台编程代码编写中,有以下几个要点: ① 接收客户的手机号码和邮箱激 ...

  10. GitLab8取消用户注册邮箱验证功能

    ##  目录根据自己git安装的目录自行修改,为防止万一,对所有修改的文件进行备份 ========================================================== ...

最新文章

  1. 恕我直言,HttpClient 你不一定会用
  2. Shuffle 相关
  3. 零起点英语_【零起点英语】第136讲:Fat Children 动动吧,胖小子!
  4. 金融系统 mysql,mysql - 适用于CRM,CMS和其他金融系统的RDBMS与NoSQL [已结束]
  5. Docker中安装DB2的详细教程和DBVisualize的安装教程
  6. Spring Boot 2.x多线程--使用@Async开启多线程使用示例
  7. commons-lang3:ArrayUtils
  8. mvdr波束形成原理_5G的“波束赋形”技术是什么东东?
  9. MySQL查询冗余索引和未使用过的索引
  10. JMeter记录篇2——性能测试基础(2)
  11. JDBC ResultSet 可更新的结果集
  12. CSS选择器种类及使用方法
  13. SQL:一条SQL的查询结果作为另一条SQL的查询条件
  14. go 调用 另一个go 的方法_Go 经典入门系列 17:方法
  15. VB.NET实现Windows剪贴板监视器
  16. 2021-10-20
  17. Vue项目使用file-saver将html转word文件、把html内容下载保存导出到本地生成doc文件包括图片:前端下载利器FileSaver
  18. CUDA error: invalid device ordinal
  19. texstudio设置暗黑主题
  20. 计算机无法显示输入法怎么办,电脑系统教程:win7输入法不显示怎么办

热门文章

  1. CF卡插到时显示文件系统变RAW请问咋才能修复???
  2. 【Java】P1957 口算练习题—(洛谷OJ)
  3. 鄂尔多斯固体废物智慧化管理平台设备和功能概况
  4. 英伟达发布《永劫无间》最新显卡驱动更新,驱动人生升级教程
  5. 单片机/开发板连接配置的三种方式
  6. Win11右键显示更多选项设置教程
  7. 12款华丽的Admin管理后台模板
  8. 2年前端 杭州 面试 集合 面经 前端
  9. Spring MVC异常统一处理的三种方式
  10. Docker详细学习文档