一开始觉得两个验证码刷新时会造成存入session的验证码字符串不同(因为验证码图片的src是controller动态生成图片的地址,担心生成一个图片就访问一次controller),所以做的是在验证码controller中生成两个验证码分别存放在不同名字的session属性中.
这样就产生了一个奇怪的bug,每次登出执行session.invalidate();之后session被销毁.跳转到登录页时,要生成两个验证码,每次生成第一个验证码时创建session,很正常,但是生成第二个验证码时又创建了session,这就造成第一次生成的验证码存放的session取不到了.奇怪的是jsessionid都是相同的,至今不清楚为什么会重建session.
最后的解决方案有两个:
1.不执行invalidate方法销毁session,而是将session所有属性通过session.getAttributeNames() 遍历删除,这样就解决了这个bug.
2.在页面两个验证码图片标签处写相同的生成验证码controller地址,这样不会生成两次验证码.在点击某一个验证码图片时刷新验证码同时刷新另一个验证码图片的src属性.