主要思路:
在数据表添加一个状态码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>密 码:<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 "系统繁忙";
}
?>