刷新下页面SessionID 为何变了呢?

   最新一个前后端分离的项目,出现了一个奇怪的现象,前端页面手动强刷新,便自动挑到了登录页。

    看后端,是因为SessionID变了。

    一般通过API接口实现前后端分离的项目这种Session丢失,可能是前端请求没有正确设置,正确设置参考如下:

1、$.ajax解决方案:

xhrFields: {
withCredentials: true
}

$.ajax({
 url:api+'user/islogin',
 xhrFields: {
       withCredentials: true
 },
 data:postdata,
 type:'json',
 method:'post',
 success:function(e){

 }

})

2、axios解决方案

axios.defaults.withCredentials = true;

       然而,前端配置后,依然还是没能解决问题;刷新页面后,依然会有Session丢失的现象。这个就比较困惑了,一度以为是前端同事没有正确修改,差点吵架。 但是,前端请求的Cookie中SessionID是没有变化的,所以问题可能还是后端的!

       突然,灵机一动,看到前端刷新请求都会有同一个请求URL返回给前端信息,Session超时。进一步检查,但是发现这个URL在后端是不存在的!

    仔细分析日志会发现:

      No mapping for POST /visitor/user/getUserInfo

      检查代码,确实没有这个URL! 但是为何不像通常那样,返回前端 404 Not Found 呢 ?

     很可能在是这种 404 Not Found,不存在的URL,被后端的拦截器拦截了,系统认为是一个新的Session,因此会返回Session超时。

      果然,如果将拦截器的代码注释,前端页面刷新,不存在的URL,返回的是  404 Not Found,这是通常的报错信息。

      总结下来,问题和刷新不刷新没有关系。访问后端不存在的URL,如果是有拦截器,被拦截器拦截后会产生新的SessionID,获取不到原Session,从而Session信息丢失,被认为是登录超时。

    但是,访问的地址后端不存在,为何拦截器会产生了新的SessionID呢 ? 这个恐怕是和拦截器机制有关系了,究竟为何,且听下回分解。如果知道原因的小伙伴,欢迎留言贴出来分享!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值