开发避坑短篇(4):跨域请求中Session数据丢失的排查与修复方案

异常信息

spring web项目,登录成功后,将用户信息存入session,然后跳转到后台首页再次查询用户信息,通过request.getSession().getAttribute(“userKey”)的方式获取session中的用户信息时,值为空。

异常分析

登录成功后,后端接口通过sendRedirect的方式在内部跳转到后台首页接口,刚开始以为是sendRedirect导致的session丢失,于是在跳转之前对url进行了encodeRedirectURL处理,如下

String encodedUrl = getResponse().encodeRedirectURL(CommonConstants.url);
getResponse().sendRedirect(encodedUrl);

当浏览器禁用Cookie时,该方法会在URL中自动附加;jsessionid=xxx参数(如/path;jsessionid=123),确保会话状态可跟踪‌。若Cookie已启用或无需编码,则返回原URL不变‌。

但是encodeRedirectURL之后还是获取不到。后来用Fiddler监控网络请求,发现跳转前的地址和跳转后的地址不一样,一个是Ip地址,一个是localhost,也就是跨域访问了。

由于浏览器对跨域请求进行了限制,尤其是涉及Session等敏感信息时,会阻止非同源请求访问其他域Session。这是同源策略 (Same-Origin Policy)的安全机制,防止跨站攻击(如CSRF、钓鱼网站等)。

解决办法

将跳转前的地址和跳转后的地址改成一样(http协议、ip地址、端口一致),防止跨域访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帧栈

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值