解决axios跨域访问导致的session ID不一致问题

记录贴

验证码原理

在写登录页面验证码功能时,采用Happy-Captcha验证码模块,先介绍一下验证码原理,

打开登录页面时,前端获取后端生成的验证码图片,此时后端会记录前端的JSESSIONID,并以JSESSIONID为key,验证码图片对应的验证码字符串为value存入session

当我们点击提交时,前端向后端提交验证码,后端会以JSESSIONID为key取出对应的value

问题就出现在这,我用的是前后端分离,前端是vscode+vue+axios ,部署在localhost:7000端口。

后端是intellij+springboot+tomcat 部署在localhost:8080端口

解决跨域访问问题

前端点击登录提交验证码时,采用Ajax技术,即axios提交验证码到后端,此时网络报错,因为前端与后端并没有部署在同一域中,怎么解决参考

SpringBoot解决跨域问题_springboot跨域配置-CSDN博客

当然此时只是解决跨域访问问题,并没有解决session ID不一致问题,axios跨域提交验证码的session ID 与登录页面请求后端验证码图片的session ID并不相同,导致你不管输入什么验证码,判断都是不正确的,因为此时key是不对的,取出来的为null。

前端提交的数据,后端不能通过request.getParam拿到

中间还有一个小问题,没出现的人不用管,在解决上述问题之后,发现前端提交的数据,后端不能通过request.getParam拿到,怎么解决的参考这篇帖子,我用的方案一

axios发送post请求后台request.getParameter接不到参数_axios.post request.getparamter null-CSDN博客

onLogin() 绑定的登录按钮,

解决session ID不一致问题

我参考了很多帖子,都没有什么效果,但是第二天打开vscode和intellij启动前后端项目时,发现莫名奇妙好了,我就一直改昨天自己修改的部分,然后重启,发现改了当前login.vue文件里面axios提交数据的一段代码时,session ID又不一样了。所以目前认为是在axios里面添加withCredentials:true这句话就能解决问题

最后贴一张大图,防止有人不知道在哪里加这句话