PHP实现的激活⽤户注册验证邮箱功能⽰例
本⽂实例讲述了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"; //SMTP服务器
$smtpserverport = 25; //SMTP服务器端⼝
$smtpusermail = "hjl416148489_4@163"; //SMTP服务器的⽤户邮箱
$smtpuser = "hjl416148489_4@163"; //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='www.jb51/demo/active.php?verify=" . $token . "' target='_blank'>www.jb51/demo/active.php?verify=" . $token . "</a  $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程序设计有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。