localhost和127.0.0.1不同源的问题
昨天晚上调了一个别人的代码,通过tomcat跑起来了,网页也可以进行正常的访问,但是,出现了一个bug,我在浏览器输入localhost:8080/login.html,
这个时候,页面会向tomcat发请求加载一个验证码到页面,随即把这个验证码存到session中,以便于登录时的校验,
问题出就出在,验证码生成了,也存到session中了,但是当登录请求发出时,后台的session中取不到验证码,一直为空,经过我对比,当时存验证码的session和第二次发请求登录时取验证码的session不是同一个session,
也就是说,在同一次会话中竟然产生了连个不同的session,而验证码存在第一个session中,可是我们却是在第二个session中取验证码,怎么可能取得到!!!
后来通过浏览器的帮助,突然发现两个session的所属网站不同,一个属于localhost,一个属于127.0.0.1,茅塞顿开!!!
开始申请code时的sessionid为
申请完验证码之后,页面竟然出现了两个sessionid,
这里注意两个sessionid所属的domain不一样,引起重视!! !
当登录请求发出之后:
这里就只剩下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不一致,导致无法获取之前保存的信息。