手机验证码、邮箱验证设计思路以及实现

手机验证码、邮箱验证设计思路以及实现。

通过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;

 

你可能感兴趣的:(web)