为了账号安全,请及时绑定邮箱和手机立即绑定

php使用邮箱注册激活账号

标签:
PHP

主要思路:

在数据表添加一个状态码status(默认为0,未激活,激活后为1),“帐号激活码token”,由用户名、密码和当前时间组成并md5加密得来的。$token_exptime用于设置激活链接URL的过期时间,用户在这个时间段内可以激活帐号。

当数据插入成功后,调用邮件发送类将激活信息发送给用户注册的邮箱,邮件中的激活链接为:处理激活码的代码active.php地址+激活码如:http://activity.appgame.com/reg/active.php?verify=d3367c45d4ee8cb37f76188be1d3abe5在邮箱中点击链接,获取参数verify的值,即激活识别码。将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。

//mysql数据表

CREATE TABLE `user` (

`id` int(11) NOT NULL,

  `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 '注册时间'

) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;


一:制作表单:index.html

   <form id="reg" action="sendmail.php" method="post" onsubmit="return chk_form();">

            <p>用户名:<input type="text" class="input" name="username" id="user"></p>

            <p>密 &nbsp; 码:<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>

二:下载email.class.php发送邮箱的类,这个类可到网上下载或在我下面也得例子中也有

在sendmail.php(插入用户名密码等信息,并发送邮件)引入email.class.php

<?php

require_once "email.class.php";


//**************数据库配置****************

$con = mysql_connect("localhost","root","root");   //修改为自己的数据库账号密码

if (!$con)

{

    die('Could not connect: ' . mysql_error());

}

mysql_select_db("test", $con);        //修改为自己的数据库

//接收注册信息

$username = stripslashes(trim($_POST['username']));

$password = md5(trim($_POST['password']));

$email = trim($_POST['email']);

$regtime = time();

$token = md5($username.$password.$regtime); //创建用于激活识别码

$token_exptime = time()+60*60*24;//过期时间为24小时后


$query=mysql_query("select username from user where username='$username'  ");

if($row=mysql_fetch_array($query)){

    echo "用户名存在";

    return 0;

}


//插入用户信息

$sql="INSERT INTO user (username, password, email,regtime,token,token_exptime)

VALUES('$username','$password','$email','$regtime','$token','$token_exptime')";


if (!mysql_query($sql,$con))

{

    die('Error: ' . mysql_error());

}

//若注册成发送邮件

//********************配置邮箱信息 ********************************

$smtpserver = "smtp.163.com";//SMTP服务器

$smtpserverport =25;//SMTP服务器端口

$smtpusermail = "xiaoming@163.com";//SMTP服务器的用户邮箱,即你的邮箱,若使用qq邮箱等其他邮箱,SMTP服务器也改为smtp.qq.com等

$smtpemailto = $_POST['email'];//发送给谁

$smtpuser = "xiaoming";//SMTP服务器的用户帐号,你的邮箱账号,对应上面的邮箱

$smtppass = "1234555";//SMTP服务器的用户密码,你的邮箱密码

$mailtitle = "激活账号";//邮件主题

$mailcontent = "亲爱的".$username.":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/><a href='http://activity.appgame.com/reg/active.php?verify=".$token."' target='_blank'>http://activity.appgame.com/reg/active.php?verify=".$token."</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/><p style='text-align:right'>-------- ***敬上</p>";


$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件

//************************发送邮件****************************

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.

$smtp->debug = false;//是否显示发送的调试信息

$state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);


echo "<div style='width:300px; margin:36px auto;'>";

if($state==""){

    echo "系统繁忙";

    echo $state->smtp_error();

    echo "<a href='index.html'>点此返回</a>";

    exit();

}

echo "恭喜!注册成功,已经发送邮箱到你的邮箱,请尽快激活!!";

echo "<a href='index.html'>点此返回</a>";

echo "</div>";

?>

三、注册成功,下面写激活代码:active.php

<?php

$con = mysql_connect("localhost","root","root");

if (!$con)

{

    die('Could not connect: ' . mysql_error());

}

mysql_select_db("test", $con);

$verify = stripslashes(trim($_GET['verify']));

$nowtime = time();

$query = mysql_query("select id ,token_exptime from  user where status=0 and token ='$verify'");

$row = mysql_fetch_array($query);

if($row){

    if($nowtime>$row['token_exptime']){ //30min

        echo "您的激活有效期已过,请登录您的帐号重新发送激活邮件";

    }else{

        mysql_query("update user set status=1 where id=".$row['id']);

        echo "激活成功";

    }

}else{

    echo "系统繁忙";

}


?>


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消