发送验证码存到Session的页面显示时间和系统失效时间

【人生三不争】不与领导争锋,不与同事争宠,不与下级争功。

【注】此文章主要说的是Session的用法,并不能成功发送验证码,若要发送验证码可看此篇https://blog.csdn.net/weixin_43599906/article/details/103889666(HttpClient可以发送验证码,不过需要配置通道扩展号码功能号,url需要短信平台地址)。读者可以在成功发送验证码后,将验证码存放到Session中并设置验证码在前端页面显示的一分钟时间和验证码的10分钟失效时间。

验证码存到Session的页面显示时间和系统失效时间

下面模拟一个发送验证码接口,将验证码存放到Session,并设置一分钟内不能持续发送验证码,并将验证码返回(可写入Service服务层),

//发送验证码 
 public Map<String, Object> sendSms(HttpServletRequest request,String phoneNum) throws ParseException {
  Map<String, Object> map = new HashMap<String, Object>();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  //随机生成六位数字验证码
  String verifyCode = String.valueOf((int) (Math.random() * 900000 + 100000));
  HttpSession session = request.getSession();
  //第一次发送验证码
  session.setAttribute("currentDate", System.currentTimeMillis());//Session放入当前系统时间
  long currentDate = (Long) session.getAttribute("currentDate");
  Long date = (Long) session.getAttribute("date");
  //一分钟内若发送验证码,currentDate的值则变成当前系统时间替换第一次发送验证码存入的时间,并获取第一次的date相减,两次验证码发送时间相隔不超过一分钟,不允许持续发送
  if (date != null && currentDate - date < 1000 * 60 * 1) {
   map.put("errorState", "验证码发送未超过一分钟");
   return map;
  }
  session.setAttribute("date", System.currentTimeMillis());//Session放入当前系统时间
  session.setAttribute("phoneNum", phoneNum);//Session放入手机号码
  session.setAttribute("verifyCode", verifyCode);//Session放入验证码
  //Session取出手机号,验证码,第一次存入的时间
  String sphoneNum = (String) session.getAttribute("phoneNum");
  String sverifyCode = (String) session.getAttribute("verifyCode");
  Long sdate = (Long) session.getAttribute("date");
  Date snowDate = sdf.parse(sdf.format(sdate));
  //将验证码返回
  map.put("verifyCode", verifyCode);
  map.put("sendSmsSuccess", "发送成功!");
  return map;
 }

下面模拟一个校验验证码接口,取出手机号和验证码,设置10分钟的失效时间,返回校验失败的各种情况(可写入Service服务层,校验接口直接这么写没问题),

//校验验证码
 public String checkSms(HttpServletRequest request,String phoneNum,String verifyCode){
  HttpSession session = request.getSession();
  //取出Session中手机号,验证码,存入的时间
  String sphoneNum = (String) session.getAttribute("phoneNum");
  String sverifyCode = (String) session.getAttribute("verifyCode");
  Long sdate = (Long) session.getAttribute("date");
  //若Session中手机号,验证码,存入的时间均为空
  if (StringUtils.isEmpty(sphoneNum) && StringUtils.isEmpty(sverifyCode)
    && session.getAttribute("date") == null) {
   return "验证码未发送或已过期!";
  }
  //设置Session中验证码的失效时间(这里为10分钟)
  if ((System.currentTimeMillis() - sdate) > 1000 * 60 * 10) {
   //超过10分钟清空Session,需重新发送验证码
   session.removeAttribute("phoneNum");
   session.removeAttribute("verifyCode");
   session.removeAttribute("date");
   return "验证码已失效!请重新发送验证码!";
  }
  if (!sverifyCode.equals(verifyCode)) {
   return "验证码输入错误!";
  }
  if (!sphoneNum.equals(phoneNum)) {
   return "手机号码不对应!";
  }
  //验证成功后清空Session
  if (sphoneNum.equals(phoneNum) && sverifyCode.equals(verifyCode)) {
   session.removeAttribute("phoneNum");
   session.removeAttribute("verifyCode");
   session.removeAttribute("now");
  }
  return null;
 }

甲:寒冷的环境可以使人变得更年轻,
乙:小明的爷爷今年70岁,出门冻得跟孙子似的。

自此,文章到此结束,如果对大家有帮助又觉得还行的话,点个赞呗!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值