localhost和127.0.0.1不同源的问题

昨天晚上调了一个别人的代码,通过tomcat跑起来了,网页也可以进行正常的访问,但是,出现了一个bug,我在浏览器输入localhost:8080/login.html,

localhost和127.0.0.1不同源的问题这个时候,页面会向tomcat发请求加载一个验证码到页面,随即把这个验证码存到session中,以便于登录时的校验,

localhost和127.0.0.1不同源的问题

问题出就出在,验证码生成了,也存到session中了,但是当登录请求发出时,后台的session中取不到验证码,一直为空,经过我对比,当时存验证码的session和第二次发请求登录时取验证码的session不是同一个session,

localhost和127.0.0.1不同源的问题

localhost和127.0.0.1不同源的问题

也就是说,在同一次会话中竟然产生了连个不同的session,而验证码存在第一个session中,可是我们却是在第二个session中取验证码,怎么可能取得到!!!

后来通过浏览器的帮助,突然发现两个session的所属网站不同,一个属于localhost,一个属于127.0.0.1,茅塞顿开!!!

开始申请code时的sessionid为

localhost和127.0.0.1不同源的问题

申请完验证码之后,页面竟然出现了两个sessionid,

localhost和127.0.0.1不同源的问题

这里注意两个sessionid所属的domain不一样,引起重视!! !

当登录请求发出之后:

localhost和127.0.0.1不同源的问题

这里就只剩下localhost的sessionid了,说明刚刚传过去的sessionid是这个,而我们存验证码的那个是属于127.0.0.1的,这里我把后台验证码的验证给注释了,不然进不来这个页面。

故: 

回到一开始,我访问的网址竟然是localhost,而不是127.0.0.1,这个在我们心中是一样的两个东西,对于浏览器来说,他解析为不同的域名,不同的域名之间的session不共享,!!!

所以,最终解决办法是,输入地址127.0.0.1:8080,就可以正常存取验证码了,整个过程出现一个sessionid。验证码功能正常!

 

其实这里就是一个问题:

根据同源策略,127.0.0.1与localhost是不同源的,所以登录时保存的信息的session的sessionId与后一个请求的sessionId不一致,导致无法获取之前保存的信息。