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不一致,导致无法获取之前保存的信息。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
WebSocket是一种在单个TCP连接上进行全双工通信的协议,常用于实现实时应用程序,如在线聊天、游戏等。当你在浏览器中访问`ws://127.0.0.1`或`wss://127.0.0.1`这样的WebSocket服务器时,如果遇到跨域问题,通常是因为浏览器出于安全考虑,不允许同一个(协议、域名和端口)的脚本与不同的WebSocket服务器进行通信。 `127.0.0.1`是本地环回地址,通常用于测试环境。在开发阶段,由于浏览器的安全策略,可能会阻止从`http://localhost`或`https://localhost`以外的请求WebSocket。解决跨域的方法有: 1. **CORS(Cross-Origin Resource Sharing)**:在服务器端设置响应头,允许特定来的跨域请求,例如添加`Access-Control-Allow-Origin: *`允许所有来,或者指定一个具体的。 ```javascript // server.js (Node.js) const express = require('express'); const app = express(); app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); // ...其他WebSocket配置... app.listen(8080, () => console.log('WebSocket server listening on port 8080')); ``` 2. **JSONP**:对于不支持CORS的旧浏览器,可以使用JSONP(JSON with Padding)技术,通过动态创建`<script>`标签来绕过同策略。 3. **代理**:在后端服务器(如Node.js)上设置一个代理,所有的WebSocket请求都通过它转发,这样可以在服务器端处理跨域问题。 4. **使用WebSocket库提供的解决方案**:一些WebSocket库,如socket.io,提供了客户端和服务器端的解决方案,可以自动处理部分跨域问题。 如果你在实际项目中遇到跨域问题,请确保你已经尝试了上述方法,并根据具体情况进行调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值