前言
公司的项目后端的逻辑不知道怎么写的,在两个月前的三个环境测试中都可以正常获取sessionId并成功登陆和到期后自动提示,但是这次这个月后端逻辑更新之后就导致sessionId每次获取的不一致导致前端总是无法登陆导致提示SessionId过期:
后端解决不了问题就一直坚持是vue框架的问题导致不一致,因为vue的框架的axios每次发送非简单请求(not-simple-request)就会先发一次OPTIONS请求,我心里也是汗颜!如果真是框架的问题,那么两个月前就登陆不上了,而且HTTP的OPTIONS方法用于获取目的资源所支持的通信,在正式跨域之前,浏览器会进行一次预检(也就是option请求),用来让服务端返回允许的方法(get、post等),被跨域访问的origin(来源或者域),还有是否需要Credentials(认证信息)等。
解决
把request.getSession()改为request.getSession(false)即可解决,原因在于request.getSession()获取不到session就会创建一个新的session,导致两次session不一致,而request.getSession(false)获取不到就返回null,此时判断为null的情况即可。
request.getSession()
在JavaWeb项目中,request.getSession()一般是用来存储当前用户对象到session中,或从session中获取当前用户对象。
建议以后向Session中存储登录信息时,一般使用:HttpSession session = request.getSession();
当从Session中获取登录信息时,就使用:HttpSession session = request.getSession(false);
总结
遇到问题冷静分析,切记冷静,冷静,不要像我一样和同事起了口角,等到大家冷静下来之后见面觉得好尴尬!
此外分享一篇关于vue中axios发送OPTIONS预检请求的原因及如何通过:https://blog.csdn.net/gu_wen_jie/article/details/84172410