前言

  公司的项目后端的逻辑不知道怎么写的,在两个月前的三个环境测试中都可以正常获取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

 

posted on 2020-08-06 16:47  Tom最好的朋友是Jerry  阅读(7087)  评论(0编辑  收藏  举报