用户注册 邮件激活验证的功能
逻辑流程:
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; 跳转到相应的页面即可。。
浙公网安备 33010602011771号