关于手机短信验证码存session 获取不到的问题

问题描述:最近做一个项目,手机端注册,服务端产生一个验证码,通过短信发送到手机,并存放到session中,但手机端发送第二次请求传回验证码,要对两个验证码进行比较判断时,session存放的验证码丢失,直接报错 “System.NullReferenceException: 未将对象引用设置到对象的实例。” 
如果是通过网页测试,session是还在的,但通过手机端就会找不到session 。

 手机端不像浏览器,每次登录后服务器端会建立一个session的回话;手机端请求完成,会话就已经结束了,所以找不到session。
目前的解决办法:将验证码放到应用上下文里。 
 
              // 生成验证码
              String code = "";
                    for (int i = 0; i < 4; i++) {
                        code += (int) (Math.random() * 10);
                    }
                
                        final ServletContext context = request.getSession().getServletContext();
                        context.setAttribute("register-" + mobile, code);// 把验证码放进应用上下文
                        // 设置验证码有效期为5分钟
                        final Timer timer = new Timer();
                        timer.schedule(new TimerTask() {
                            @Override
                            public void run() {
                                context.removeAttribute("login-" + mobile);
                                System.out.println(mobile + "验证码删除成功");
                                timer.cancel();
                            }
                        }, 5 * 60 * 1000);
                    
原文地址:https://www.cnblogs.com/qiuting/p/6180126.html