接口中cookie带不过去的问题

1,125 阅读2分钟

最近在做一个项目,前后端分离模式,部署在不同服务器上面;由于需要做登录验证,中台会在登录成功之后往cookie上放一个token,前端在其他接口请求的时候带过去,判断是否是登录状态;

首先由于部署在不同的服务器上面,需要解决跨域问题。先是采用后端设置 Access-Control-Allow-Origin 允许跨域的方式;

设置后接口带不过去cookie;检查application中cookie,token不存在;经排查发现后台cookie未设置具体的路径,默认会设置在当前域名下的当前路径,aa.bb.com/ccc 下面;而前端的页面在 dd.bb.com/ee ,属于同一主域,只有设置在同一主域下才能显示,并且路径 path 要设置为 / ;修改之后在application-->cookie 中看到了token;但是请求还是未带过去,接着查找资料,需要给 axios 配置 axios.defaults.withCredentials=true;配置之后就可以带过去了;

引入第三方组件,并且组件中使用$.post请求数据,发现接口中cookie又带不过去了;因为没有走项目中的 axios;不想修改组件源码,添加 withCredentials=true;选择修改方案,采用nginx接口转发解决跨域问题;项目中的地址写成相对路径,cookie也能带过去了;

说的有点乱,总结一下:

  1. 两种跨域方式,一种后台设置 Access-Control-Allow-Origin 。前端请求路径写为绝对路径,由于前端域名和接口域名不同源,请求中默认不携带 cookie,需要配置 axios.defaults.withCredentials=true;或者jquery方式下withCredentials=true;配置后在主域名相同的情况下会带过去;

  2. 如果前端自己配置接口转发,请求中路径写为相对路径,此时不会出现跨域问题,由于是同源下,cookie也会默认携带;