注册邮箱验证激活技术

阅读:1083 2019-03-20 14:08:35 来源:新网

一.先说思路//1.数据库加三个字段,state:(0:未激活,1:激活成功),acticode:(放激活码),token_exptime(过期时间,用来验证激活邮件是否过期)

//2.用户填写资料,点击注册,插入数据成功,state字段默认是0,同时生成一个acticode(用传过来的邮箱、密码、和当前时间加密形成)也存入数据库//3.发送邮件。。。提示用户登录邮箱激活。。。邮件中带一个激活成功页的url,url里有两个参数(1,用户id,2:激活码)//4.用户登录邮箱点击链接,来到处理激活的业务逻辑页面或servlet,得到url中两个参数,以这两个参数为条件查询数据库里的数据,如果有,取当前时间和之前存入数据库的过期时间作比较,看是否过期,过期,删除数据库中该条记录,并转到失败页面,没过期,查看链接传过来的激活码与数据库字段激活码是否一致,不一致,同样删除数据库中该条记录,并跳转到激活失败界面,一致,则将字段state为1,激活成功,转到激活成功页。。。二、具体实现代码1.首先,准备一个简单的测试页面

e-mail:

密码:

2.点击提交注册,来到user.action?op=reg,注意带的参数op指我要做的操作,用于后面的servlet做判断该做什么操作,下面的代码完成了形成激活码、过期时间等表示当前注册用户的状态的信息存入数据库并发送邮件的过程。(邮件内容自定义,可以忽略我的)

packagecom.nh.web.servlets;importjava.io.ioexception;importjava.io.printwriter;importjava.sql.sqlexception;importjava.text.simpledateformat;importjava.util.arraylist;importjava.util.calendar;importjava.util.date;importjava.util.list;importjava.util.uuid;importjavax.naming.namingexception;importjavax.servlet.servletexception;importjavax.servlet.http.httpservlet;importjavax.servlet.http.httpservletrequest;importjavax.servlet.http.httpservletresponse;importcom.nh.dao.dbhelper;importcom.nh.utils.encrypt;importcom.nh.utils.sendemail;publicclassuserservletextendscommonservlet{publicvoiddopost(httpservletrequestrequest,httpservletresponseresponse)throwsservletexception,ioexception{//取出opstringop=request.getparameter("op");//判断op是什么,调用不同的方法做处理try{if(op!=null&&!"".equals(op)){if("reg".equals(op)){regop(request,response);}}else{}}catch(exceptione){e.printstacktrace();response.sendredirect("common/500.jsp");}}privatevoidregop(httpservletrequestrequest,httpservletresponseresponse)throwsioexception,sqlexception,namingexception{//1.数据库加两个字,state字段(0:未激活,1:激活成功),acticode:(放激活码)//2.用户填写资料,插入数据成功,state字段默认是0,同时生成一个acticode也存入数据库//3.提示用户激活。。。发送邮件。。。邮件中带一个激活成功页的url,url里有两个参数(1,用户id,2:激活码)//4.用户点击链接,回到激活成功页。。。激活成功页的load事件,得到两个参数,以这两个参数为条件查询数据库里的数据,如果有,修改字段state为1,反之。。提示激活失败,重新激活。。stringemail=request.getparameter("email");stringpwd=encrypt.md5(request.getparameter("pwd"));calendarc=calendar.getinstance();//现在的时间(单位:毫秒)//todo:时间换算问题,如何处理int和long之间的关系longtime=c.gettimeinmillis();//创建激活码stringtoken=encrypt.md5(email+pwd+time);//过期时间为24小时后//inttoken_exptime=(int)(time+1000*60*60*24);stringtoken_exptime=(time+1000*20)+"";//这里测试是用的20秒stringid=uuid.randomuuid().tostring();stringsql="insertintotb_user(id,username,pwd,token,token_exptime,regtime,status)values(?,?,?,?,?,sysdate,0)";listparams=newarraylist();params.add(id);params.add(email);params.add(pwd);params.add(token);params.add(token_exptime);dbhelperdb=newdbhelper();intr=db.doupdate(sql,params);//保存注册信息if(r>0){//发送邮件///邮件的内容simpledateformatsdf=newsimpledateformat("yyyy-mm-dd");stringbuffersb=newstringbuffer("lofter"+"您好,"+email+"

lofter是一款"专注兴趣、分享创作"的轻博客产品,旨在为"热爱记录生活、追求时尚品质、崇尚自由空间"的你,打造一个全新而定展示平台!

请点击下面链接激活账号,24小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!
");sb.append("http://localhost:8080/mailtest/emailcheck.action?op=activate&id=");sb.append(id);sb.append("&token=");sb.append(token);sb.append(""+"
如果以上链接无法点击,请把上面网页地址复制到浏览器地址栏中打开


lofter,专注兴趣,分享创作
"+sdf.format(newdate())+"");//发送邮件sendemail.send(email,sb.tostring());}response.sendredirect("doemail.action?op=emaillogin&email="+email+"&pwd="+pwd);}}

这是qq邮箱设置,一般开启1、2、4这是收到的激活邮件根据用户所填邮箱跳转相应邮箱登录地址的代码

packagecom.nh.web.servlets;importjava.io.ioexception;importjava.io.printwriter;importjavax.servlet.servletexception;importjavax.servlet.http.httpservlet;importjavax.servlet.http.httpservletrequest;importjavax.servlet.http.httpservletresponse;publicclassdoemailloginservletextendscommonservlet{publicvoiddopost(httpservletrequestrequest,httpservletresponseresponse)throwsservletexception,ioexception{stringop=request.getparameter("op");//判断op是什么,调用不同的方法做处理try{if(op!=null&&!"".equals(op)){if("emaillogin".equals(op)){emailloginop(request,response);}}else{}}catch(exceptione){e.printstacktrace();response.sendredirect("common/500.jsp");}}privatevoidemailloginop(httpservletrequestrequest,httpservletresponseresponse)throwsioexception{//判断用户邮箱是什么,跳到指定邮箱登陆界面stringemail=request.getparameter("email");//572480349@qq.comstringpwd=request.getparameter("pwd");stringaddrstr=email.split("@")[1];//qq.comif("qq.com".equals(addrstr)){addrstr="https://mail.qq.com";}elseif("163.com".equals(addrstr)){addrstr="http://mail.163.com/";}elseif("126.com".equals(addrstr)){addrstr="http://www.126.com/";}elseif("sina.com".equals(addrstr)){addrstr="http://mail.sina.com.cn/";}elseif("hotmail.com".equals(addrstr)){addrstr="https://login.live.com";}response.sendredirect("emailaction.jsp?email="+email+"&pwd="+pwd+"&addrstr="+addrstr);}}

具体页面我就不一一给了,直接上激活验证代码吧

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服