用户注册 邮件激活验证的功能

逻辑流程:
1.用户提交注册信息

2.写入数据库,此时账号状态未激活[ status状态默认是0]

3.构造激活码[ 激活码以用户名+密码+注册时间经MD5加密组成 ];

4.将激活码组成的url发送到提交的邮箱;

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

6.$_get[]获取url参数, 验证激活码信息,正确就激活账号;更新激活状态status

在前端index.html注册页面当中,$_POST提交信息到register.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 '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>';
    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);
if(mysql_insert_id()){// 获取到插入id,写入成功,发邮件
    include_once("PHPMailerAutoload.php");
    $mail = new PHPMailer();
    $mail->isSMTP();

    //设置编码,防止中文乱码
$mail->CharSet="utf-8"; 
$mail->Encoding = "base64";  
    //$mail->SMTPDebug = 2;//是否开启调试模式
    $mail->Debugoutput = 'html';//调试模式的输出方式
    $mail->Host = "smtp.qq.com";//如果是163或126其他的就换成相应的[ 注意:要在邮箱里面开启smtp功能 ]
    $mail->Port = 25;
    $mail->SMTPAuth = true;
    $mail->Username = "xxxxx@qq.com";//一般是企业邮箱
    $mail->Password = "xxxxx";//企业邮箱密码
$mail->setFrom('xxxxxx@qq.com', 'xxx账号激活');//要发送信息的邮件;邮件名称[写激活]

$mail->addReplyTo('xxxx@qq.com', 'First Last');//回复信息的,可选择的,可以注释掉

//Set who the message is to be sent to
$mail->addAddress($email, 'xxxx先生/女士');//要发送的邮件[账号注册用户的邮件],收件人的信息[某某名字]
//Set the subject line
$mail->Subject = 'xx用户账号激活';//邮件内容的标题


$body = "亲爱的".$username.":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/><a href='http://127.0.0.1/register/active.php?verify=".$token."' target='_blank'>http://127.0.0.1/register/active.php?verify=".$token."</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/><p style='text-align:right'>我的测试--潘</p>";
//$mail->AltBody = 'This is a plain-text message body'; //Attach an image file $mail->MsgHTML($body); if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!"; } }

 

2.用户登录邮件之后:点击链接,跳转到active.php页面进行判断激活与否。,再处理相应的业务逻辑

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']){ 
        $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 = '错误啦...';    
}

echo $msg;
?>


激活成功,设置用户$_session[id],name; 跳转到相应的页面即可。。

posted on 2013-11-07 17:13  paly76  阅读(863)  评论(0)    收藏  举报

导航