问题描述:最近做一个项目,手机端注册,服务端产生一个验证码,通过短信发送到手机,并存放到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);