//1.數(shù)據(jù)庫加三個(gè)字段,state:(0:未激活,1:激活成功),ActiCode:(放激活碼),token_exptime(過期時(shí)間,用來驗(yàn)證激活郵件是否過期)

//2.用戶填寫資料,點(diǎn)擊注冊(cè),插入數(shù)據(jù)成功,state字段默認(rèn)是0,同時(shí)生成一個(gè)ActiCode(用傳過來的郵箱、密碼、和當(dāng)前時(shí)間加密形成)也存入數(shù)據(jù)庫
//3.發(fā)送郵件。。。提示用戶登錄郵箱激活。。。郵件中帶一個(gè)激活成功頁的URL,URL里有兩個(gè)參數(shù)(1,用戶ID,2:激活碼)
//4.用戶登錄郵箱點(diǎn)擊鏈接,來到處理激活的業(yè)務(wù)邏輯頁面或Servlet,得到URL中兩個(gè)參數(shù),以這兩個(gè)參數(shù)為條件查詢數(shù)據(jù)庫里的數(shù)據(jù),如果有,取當(dāng)前時(shí)間和之前存入數(shù)據(jù)庫的過期時(shí)間作比較,看是否過期,過期,刪除數(shù)據(jù)庫中該條記錄,并轉(zhuǎn)到失敗頁面,沒過期,查看鏈接傳過來的激活碼與數(shù)據(jù)庫字段激活碼是否一致,不一致,同樣刪除數(shù)據(jù)庫中該條記錄,并跳轉(zhuǎn)到激活失敗界面,一致,則將字段state為1,激活成功,轉(zhuǎn)到激活成功頁。。。
二、具體實(shí)現(xiàn)代碼
1.首先,準(zhǔn)備一個(gè)簡(jiǎn)單的測(cè)試頁面

<body> <div id=”main” style=”margin:0 auto;width:500px;”> <form id=”reg” action=”user.action?op=reg” method=”post”> <p> E-mail:<input type=”text” class=”input” name=”email” id=”email”> </p> <p> 密 碼:<input type=”password” class=”input” name=”pwd” id=”pwd”> </p> <p> <input type=”submit” class=”btn” value=”提交注冊(cè)” > </p> </form> </div> </body>

2.點(diǎn)擊提交注冊(cè),來到user.action?op=reg,注意帶的參數(shù)op指我要做的操作,用于后面的Servlet做判斷該做什么操作,下面的代碼完成了形成激活碼、過期時(shí)間等表示當(dāng)前注冊(cè)用戶的狀態(tài)的信息存入數(shù)據(jù)庫并發(fā)送郵件的過程。(郵件內(nèi)容自定義,可以忽略我的)

package com.nh.web.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.UUID; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.nh.dao.DBHelper; import com.nh.utils.Encrypt; import com.nh.utils.SendEmail; public class UserServlet extends CommonServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 取出op String op = request.getParameter(“op”); // 判斷op是什么,調(diào)用不同的方法做處理 try { if (op != null && !””.equals(op)) { if (“reg”.equals(op)) { regOP(request, response); } } else { } } catch (Exception e) { e.printStackTrace(); response.sendRedirect(“common/500.jsp”); } } private void regOP(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, NamingException { // 1.數(shù)據(jù)庫加兩個(gè)字,state字段(0:未激活,1:激活成功),ActiCode:(放激活碼) // 2.用戶填寫資料,插入數(shù)據(jù)成功,state字段默認(rèn)是0,同時(shí)生成一個(gè)ActiCode也存入數(shù)據(jù)庫 // 3.提示用戶激活。。。發(fā)送郵件。。。郵件中帶一個(gè)激活成功頁的URL,URL里有兩個(gè)參數(shù)(1,用戶ID,2:激活碼) // 4.用戶點(diǎn)擊鏈接,回到激活成功頁。。。激活成功頁的Load事件,得到兩個(gè)參數(shù),以這兩個(gè)參數(shù)為條件查詢數(shù)據(jù)庫里的數(shù)據(jù),如果有,修改字段state為1,反之。。提示激活失敗,重新激活。。 String email=request.getParameter(“email”); String pwd=Encrypt.md5(request.getParameter(“pwd”)); Calendar c = Calendar.getInstance(); //現(xiàn)在的時(shí)間(單位:毫秒) //TODO:時(shí)間換算問題,如何處理int和long之間的關(guān)系 long time = c.getTimeInMillis(); //創(chuàng)建激活碼 String token=Encrypt.md5(email pwd time); //過期時(shí)間為24小時(shí)后 // int token_exptime=(int)(time 1000*60*60*24); String token_exptime=(time 1000*20) “”; //這里測(cè)試是用的20秒 String id=UUID.randomUUID().toString(); String sql=”insert into tb_user(id,username,pwd,token,token_exptime,regtime,status) values (?,?,?,?,?,sysdate,0)”; List<Object> params=new ArrayList<Object>(); params.add(id); params.add(email); params.add(pwd); params.add(token); params.add(token_exptime); DBHelper db=new DBHelper(); int r=db.doUpdate(sql, params); //保存注冊(cè)信息 if( r>0 ){ //發(fā)送郵件 ///郵件的內(nèi)容 SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”); StringBuffer sb=new StringBuffer(“<div style=”width:660px;overflow:hidden;border-bottom:1px solid #bdbdbe;”><div style=”height:52px;overflow:hidden;border:1px solid #464c51;background:#353b3f url(http://www.lofter.com/rsc/img/email/hdbg.png);”><a href=”http://www.lofter.com?mail=qbclickbynoticemail_20120626_01″ target=”_blank” style=”display:block;width:144px;height:34px;margin:10px 0 0 20px;overflow:hidden;text-indent:-2000px;background:url(http://www.lofter.com/rsc/img/email/logo.png) no-repeat;”>LOFTER</a></div>” “<div style=”padding:24px 20px;”>您好,” email “<br/><br/>LOFTER是一款”專注興趣、分享創(chuàng)作”的輕博客產(chǎn)品,旨在為”熱愛記錄生活、追求時(shí)尚品質(zhì)、崇尚自由空間”的你,打造一個(gè)全新而定展示平臺(tái)!<br/><br/>請(qǐng)點(diǎn)擊下面鏈接激活賬號(hào),24小時(shí)生效,否則重新注冊(cè)賬號(hào),鏈接只能使用一次,請(qǐng)盡快激活!</br>”); sb.append(“<a href=”http://localhost:8080/mailtest/emailcheck.action?op=activate&id=”); sb.append(id); sb.append(“&token=”); sb.append(token); sb.append(“”>http://localhost:8080/mailtest/emailcheck.action?op=activate&id=”); sb.append(id); sb.append(“&token=”); sb.append(token); sb.append(“</a>” “<br/>如果以上鏈接無法點(diǎn)擊,請(qǐng)把上面網(wǎng)頁地址復(fù)制到瀏覽器地址欄中打開<br/><br/><br/>LOFTER,專注興趣,分享創(chuàng)作<br/>” sdf.format(new Date()) “</div></div>” ); //發(fā)送郵件 SendEmail.send(email, sb.toString()); } response.sendRedirect(“doEmail.action?op=emaillogin&email=” email “&pwd=” pwd); } }

這是QQ郵箱設(shè)置,一般開啟1、2、4

這是收到的激活郵件

根據(jù)用戶所填郵箱跳轉(zhuǎn)相應(yīng)郵箱登錄地址的代碼

package com.nh.web.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DoEmailLoginServlet extends CommonServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String op = request.getParameter(“op”); // 判斷op是什么,調(diào)用不同的方法做處理 try { if (op != null && !””.equals(op)) { if (“emaillogin”.equals(op)) { emailloginOP(request, response); } } else { } } catch (Exception e) { e.printStackTrace(); response.sendRedirect(“common/500.jsp”); } } private void emailloginOP(HttpServletRequest request, HttpServletResponse response) throws IOException { //判斷用戶郵箱是什么,跳到指定郵箱登陸界面 String email=request.getParameter(“email”); //572480349@qq.com String pwd=request.getParameter(“pwd”); String addrstr=email.split(“@”)[1]; //qq.com if( “qq.com”.equals(addrstr)){ addrstr=”https://mail.qq.com”; }else if( “163.com”.equals(addrstr)){ addrstr=”http://mail.163.com/”; }else if( “126.com”.equals(addrstr)){ addrstr=”http://www.126.com/”; }else if( “sina.com”.equals(addrstr)){ addrstr=”http://mail.sina.com.cn/”; }else if( “hotmail.com”.equals(addrstr)){ addrstr=”https://login.live.com”; } response.sendRedirect(“emailaction.jsp?email=” email “&pwd=” pwd “&addrstr=” addrstr); } }

具體頁面我就不一一給了,直接上激活驗(yàn)證代碼吧

package com.nh.web.servlets; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.lofter.bean.User; import com.nh.dao.DBHelper; import com.nh.utils.DataExistAlreadyException; public class EmailActivateCheckServlet extends CommonServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 取出op String op = request.getParameter(“op”); // 判斷op是什么,調(diào)用不同的方法做處理 try { if (op != null && !””.equals(op)) { if( “activate”.equals(op)){ activateOP(request,response); } } else { } } catch (Exception e) { e.printStackTrace(); response.sendRedirect(“common/500.jsp”); } } private void activateOP(HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, Exception { //獲取參數(shù)token的值,即激活識(shí)別碼。 //將它與數(shù)據(jù)表中的用戶信息進(jìn)行查詢對(duì)比,如果有相應(yīng)的數(shù)據(jù)集,判斷是否過期,如果在有效期內(nèi)則將對(duì)應(yīng)的用戶表中字段status設(shè)置1,即已激活,這樣就完成了激活功能。 String id=request.getParameter(“id”); String token=request.getParameter(“token”); Calendar c = Calendar.getInstance(); //現(xiàn)在的時(shí)間(單位:毫秒) long curtime = c.getTimeInMillis(); String sql=”select id,token_exptime,token,username,pwd from tb_user where status=0 and token=?”; List<Object> params=new ArrayList<Object>(); params.add( token ); DBHelper db=new DBHelper(); User u=db.findSingleObject(User.class, sql, params); String email=u.getUsername(); String pwd=u.getPwd(); if( u!=null ){ long token_exptime=Long.parseLong(u.getToken_exptime()); if( curtime>token_exptime ){ //激活碼過期,先刪除該用戶記錄,然后重新發(fā)送郵件 sql=”delete from tb_user where id=\\\'” u.getId() “\\\'”; db.doUpdate(sql, null); response.sendRedirect(“actionfailer.jsp?email=” email “&pwd=” pwd); // throw new DataExistAlreadyException(“激活碼已過期!”); return; }else{ //驗(yàn)證激活碼是否正確 if( token.equals(u.getToken())){ //激活成功, //并更新用戶的激活狀態(tài),為已激活 sql=”update tb_user set status=1 where id=\\\'” u.getId() “\\\'”; db.doUpdate(sql, null); response.sendRedirect(“actionsuccess.jsp”); }else{ sql=”delete from tb_user where id=\\\'” u.getId() “\\\'”; db.doUpdate(sql, null); response.sendRedirect(“actionfailer.jsp?email=” email “&pwd=” pwd); return; // throw new DataExistAlreadyException(“激活碼不正確”); } } } } } package com.nh.web.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public abstract class CommonServlet extends HttpServlet { private static final long serialVersionUID = 3893961453320250657L; private String saveFilePath=””; protected String basePath=””; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { saveFilePath=req.getRealPath(“/”); HttpSession session=req.getSession(); ServletContext application=session.getServletContext(); if( application.getAttribute(“basePath”)!=null ){ basePath=(String) application.getAttribute(“basePath”); } super.service(req, resp); } } package com.lofter.bean; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private static final long serialVersionUID = -1989259749641485708L; private String id; private String username; // –賬戶 private String pwd; // –密碼 private String nickname; // –名稱 private String autograph; // –個(gè)人簽名 private String head; // –頭像 private Date regtime; // –注冊(cè)時(shí)間 private String token; // –賬號(hào)激活碼 private String token_exptime; // –激活碼有效期 private Integer status; // –激活狀態(tài) ,0-未激活,1-已激活 public User() { super(); } public User(String id, String username, String pwd, String nickname, String autograph, String head, Date regtime, String token, String token_exptime, Integer status) { super(); this.id = id; this.username = username; this.pwd = pwd; this.nickname = nickname; this.autograph = autograph; this.head = head; this.regtime = regtime; this.token = token; this.token_exptime = token_exptime; this.status = status; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getAutograph() { return autograph; } public void setAutograph(String autograph) { this.autograph = autograph; } public String getHead() { return head; } public void setHead(String head) { this.head = head; } public Date getRegtime() { return regtime; } public void setRegtime(Date regtime) { this.regtime = regtime; } public static long getSerialversionuid() { return serialVersionUID; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public String getToken_exptime() { return token_exptime; } public void setToken_exptime(String token_exptime) { this.token_exptime = token_exptime; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } }

如果,你對(duì)上面的內(nèi)容還有疑問,推薦選擇三五互聯(lián)企業(yè)云郵箱!有專人協(xié)助您解答郵箱疑問。

三五互聯(lián)優(yōu)質(zhì)企業(yè)郵箱服務(wù)商,提供安全穩(wěn)定,簡(jiǎn)單易用,高性價(jià)比的企業(yè)郵箱。按需自由定制,不限空間,極速收發(fā),能夠滿足用戶對(duì)企業(yè)郵箱的不同需求。多種反垃圾郵件算法,99.9%精準(zhǔn)度,智能過濾,減少垃圾郵件干擾。支持小程序收發(fā)郵件,隨時(shí)隨地移動(dòng)辦公。而且價(jià)格實(shí)惠,還可以免費(fèi)試用,7×24小時(shí)專業(yè)團(tuán)隊(duì)服務(wù)支持!

高性價(jià)比企業(yè)郵箱開通鏈接:http://m.shinetop.cn/services/mail/

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:三五互聯(lián)知識(shí)庫 » 注冊(cè)郵箱驗(yàn)證激活技術(shù)

登錄

找回密碼

注冊(cè)

主站蜘蛛池模板: 日本一区二区三区在线 |观看| 国产av一区二区亚洲精品| 精品九九人人做人人爱| 色秀网在线观看视频免费| 国产精品多p对白交换绿帽| 精品无码人妻| 人妻教师痴汉电车波多野结衣| 久久国产自拍一区二区三区| 在线观看AV永久免费| 欧美人禽zozo动人物杂交| 中文国产成人精品久久不卡| 激情综合色综合久久综合| 日韩av日韩av在线| 成人性生交大片免费看r老牛网站| 国产亚洲欧美日韩俺去了| 亚洲精品免费一二三区| 播放灌醉水嫩大学生国内精品| 国产色悠悠视频在线观看| 黄色亚洲一区二区在线观看| 亚洲熟妇少妇任你躁在线观看无码| 城固县| 久久午夜夜伦鲁鲁片免费无码影院| 国产欧美VA天堂在线观看视频| 性高湖久久久久久久久| 国产三级a三级三级| 精品一区二区三区四区激情| 久久成人影院精品777| 精品偷自拍另类精品在线| 国产精品久久久久久久专区| 亚洲男女羞羞无遮挡久久丫| 色熟妇人妻久久中文字幕| 诱人的老师hd中文字幕| 无码国产偷倩在线播放老年人| 少妇被粗大的猛烈进出动视频| 加勒比无码av中文字幕| 国产蜜臀在线一区二区三区| 天堂av色综合久久天堂| 日韩精品成人一区二区三区| 亚洲日韩一区二区| 国产在线一区二区在线视频| 影音先锋2020色资源网|