项目中验证码的实现思路:登录页面 调用 jsp页面 生成验证码图片 并把验证码保存到 session中
用户登录的controller 中 把用户输入的验证码和 session中取出的验证码 进行比较 ,相同则验证码输入正确。
测试中出现一个bug ,bug描述:IE浏览器下 用户第一次登录 总是显示 验证码错误 登录失败,除第一次外都能登录成功。登录成功后 退出,再次登录没问题。直接关闭IE浏览器 再次登录 显示 验证码错误 登录失败。其他浏览器 如 Google,火狐不出现。
解决思路 刚开始定位到IE浏览器 缓存问题,给添加 随机变量 防止IE浏览器缓存 而不进行重新请求验证码。 添加后发现问题不在这。
监听session的创建发现 进入登录页面 和 用户登录请求 创建了 两个session,登录页面时 把验证码保存到第一个session中,登录验证时候 是和 第二个session 比较的 ,第二个session 中 不存在保存的验证码 为null 所以第一次登录 一直是验证码错误登录不了。
解决方法 登录页面 js生成验证码保存到隐藏域中, 并发送请求到 img.jsp 显示验证码。用户登录验证修改为和页面传过来的验证码比较。暂时解决了这个问题。当然这样做安全上存在很大的问题。
不知道我这出现的问题是个例还是大家都出现过这样的问题呢?