手机验证码、邮箱验证设计思路以及实现。
通过session实现。
1.点击获取验证码,并记录时间
//生成随机数
public static String generatedVcode() {
String vcode = “”;
for (int i = 0; i < 6; i++) {
vcode = vcode + (int) (Math.random() * 9);
}
return vcode;
}
//将随机数、当前时间放在session中
HttpSession session = request.getSession(false);
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);//设置日期格式
session.setAttribute(“verifycode”, verifycode);
String senddate = df.format(new Date());
session.setAttribute(“senddate”, senddate);
//验证
HttpSession session = request.getSession(false);
String senddate = (String)session.getAttribute(“senddate”);
String code = request.getParameter(“verifycode”);
Long secends = Tool.diferentSecend(gaindate, senddate);
public static long diferentSecend(String date1, String date2) {
long secend = 0;
/*
* date1 = “2008-10-13 18:35:00”; date2 = “2008-10-12 18:35:00”;
*/
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sf = new SimpleDateFormat(pattern);
try {
Date d1 = sf.parse(date1);
Date d2 = sf.parse(date2);
if(d1.getTime() > d2.getTime()) {
secend = (d1.getTime() - d2.getTime()) / 1000;
}else {
secend = (d2.getTime() - d1.getTime()) / 1000;
}
}catch(ParseException e) {
e.printStackTrace();
}
System.out.println("一天秒数" + secend);
return secend;
}
//如果超出有效期,则从session中将数据移除
if(secends > lvaliddate) {
session.removeAttribute(“verifycode”);
session.removeAttribute(“senddate”);
}
// 如果在有效内,验证码校验
String verifycode = (String)session.getAttribute(“verifycode”);//session中的验证码
String code = request.getParameter(“verifycode”);//客户端传递过来的值
if(code.equals(verifycode)) {
//校验成功
}else{
//校验失败
}
//session知识补充
getSession(boolean create)意思是返回当前reqeust中的HttpSession ,如果当前reqeust中的HttpSession 为null,
当create为true,就创建一个新的Session,否则返回null;
简而言之:
HttpServletRequest.getSession(ture)等同于 HttpServletRequest.getSession()
HttpServletRequest.getSession(false)等同于 如果当前Session没有就为null;