session登录状态无法保持的问题之一

0.问题引出

这里记录一下使用ajax和session想要实现保持登录状态的一个踩坑。

首先在登录请求成功后使用UserAccount为用户设置session。

后端登录代码

然后编写了一个状态获取方法,用来获取当前账号的状态,是否登录,以及登录后的内容解析。

后端状态代码

前端则是通过ajax在页面加载完成之后向后端发送异步请求,蓝框部分为允许跨域携带cookie等参数的配置。

ajax状态请求代码

本以为通过上述的配置就大功告成了,但是通过测试发现,登录状态无法保持,每次请求的sessionid都不一致。

1.排查思路

后端问题

首先排查的是后端,认为是后端没有将sessionid传送过来或者是由于每种原因每次传输的sessionid都不一致。

经过一系列的检查,并且将session的传输改为专用的HttpsSession session后发现问题仍然存在。

并且确认没问题后将问题转向前端。

前端问题

由于确认了后端没有问题,则转向前端问题的处理。

再次确认了ajax添加了允许携带参数等配置,并且经过一系列的测试,发现一切也都没有任何问题,但登录状态就是无法保持。

则将矛头指向跨域sessionid 的传递问题。

跨域问题

由于开发使用的是http,通过查询文章得知,如果想要跨域传递sessionid等参数则需要设置Samesite为none,那么又有一个前置条件就是,需要开启仅限https传递,即需要设置secue参数为true,否则无效。

那么问题无解了啊,后经过探讨,确定问题并不是出现在这里。

2.搬救兵

由于自己检查了很多遍并未发现问题,也没有解决状态没法保持的问题,所以搬救兵。
同样检查了前后端之后并未发现问题,使用其他技术可以正常实现。
最后通过偶然的检查前端ajax登录操作,发现原因是这里未编写携带参数,加上携带参数后恢复正常。

总结

归根到底就是前端ajax登录操作未配置携带参数,导致后端设置的sessionid无法传递到浏览器,然后前端每次查询状态操作时sessionid为空则自动配置了一个,导致后端接收后解析出来的参数为空,无法保持登录状态!

问题演示

 

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容