springboot后端
vue为前端
axios作为请求库
情景:登录验证码失效,sessionid值每次不一样。
前端发送请求至后端(跨域),后端提取到的sessionid均为空,这样造成了每次都向前端set新的sessionid,通过set-cookie可看到。
按照网上说法,设置axios允许跨域:
withCredentials:true,
后端设置允许接收跨域请求携带cookie:
HttpServletRequest reqs = (HttpServletRequest) req; String allowOrigin = reqs.getHeader("Origin"); response.setHeader("Access-Control-Allow-Origin",allowOrigin); //允许跨域cookies response.setHeader("Access-Control-Allow-Credentials", "true");
以上均设置后问题依然存在!
后来观察请求报文相应,发现后端每次给前端发送set-cookie时候,均有个黄色感叹号!
根据提醒内容,浏览器跨域把set-cookie给拦截了!
SameSite这个引起的!
因此,要解决问题得从这里入手,百度相关知识,大多是把浏览器设置关闭,但用户怎么可能接受呢。
解决(系统通过shiro认证,在配置cookie里面增加):
cookie.setSameSite(Cookie.SameSiteOptions.LAX); cookie.setSecure(true);