关于Java WEB登录那点事
关于Java WEB登录那点事
在一些实际项目的开发中,难免有些项目会使用到登陆这个功能,这个功能看似简单,实际上也涉及到了很多的东西。
开发过程当中,前台提交Form表单,后台从Form表单中取出用户的信息去进行验证。在本地的测试中,这样的流程是没有任何问题的。当我们把这样的项目一经发布上线,情况就发生了不同,因为我们的项目都不止是在一个服务器上运行,一个域名不止对应了一台服务器,而是多台。在这样的情况下,在进行登录,就会发现,明明输入正确的信息和验证码,服务器返回的信息却是输入的信息有误,登录不上去。
说到这里,讲述一个概念“负载均衡”;负载均衡是什么?个人理解,负载均衡就是为了减轻服务器的压力,一个项目对应了多台服务器,根据客户端的请求,随机分配服务器对客户端进行响应。在这里,分享一个负载均衡服务器—》“Nginx“。

根据这个理解,上面发生的问题似乎就有了答案了;打开登录的页面,访问的是某台服务器,服务器响应的验证码又是另一台服务器,在进行登录,登录对应的服务器发生改变,并不是生成验证码的那台服务器,所以造成用户登录次次失败。
总结原因,对应出了以下几个解决方案:
1.在表单的action的地址中加入: ;JSESSIONID=session的ID值。
在生成验证码的地址同理如上
注: JSESSIONID在?之前,用;隔开
2.在生成验证码之后,写入Cookie。
登录成功后,写入Cookie,这样就可以解决多台服务器共享信息。
分享一些注意细节:
Java WEB中,调用了response.getOuputStream();之后,向客户端输出一些信息之后,在调用response的addCookie()方法,就不能在进行写入Cookie操作,会出现读取不到Cookie的信息。
浙公网安备 33010602011771号