设为首页 收藏本站
查看: 841|回复: 0

[经验分享] php使用邮箱注册激活账号

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-27 09:49:20 | 显示全部楼层 |阅读模式
主要思路:

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

当数据插入成功后,调用邮件发送类将激活信息发送给用户注册的邮箱,邮件中的激活链接为:处理激活码的代码active.php地址+激活码如:http://activity.appgame.com/reg/ ... cb37f76188be1d3abe5在邮箱中点击链接,获取参数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">
            <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 "系统繁忙";
}

?>


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144060-1-1.html 上篇帖子: php检测邮箱密码 下篇帖子: php添加mysqli扩展 邮箱注册 账号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表