问题提要:
后台需要对正式IP地址加上/admin后缀,所以在vue的路由配置中使用mode: 'history'。webpack打包后放置在node写的一个web服务器(port3000)上。
web服务器上登录接口会向前端发送username,role,token,3个cookie。
使用koa2的ctx.cookies.set方法写了3条set-cookie语句在相应上:
- ctx.cookies.set('username', username, config);
- ctx.cookies.set('role', role, config);
- ctx.cookies.set('token', token, config);
其中config没有对domain设置,配置如下:
{
signed: true, //token设置为true,username和role则由另一个配置设置为false
expires: 1000*3600*24,
maxAge: 1000*3600*24,
path: '/admin',
domain: '47.98.37.125',
httpOnly: false
}
在整个web服务器中,对所有接口都将其设置了允许跨域写入,同时前端页面在开发中对axios的默认配置中将withCredentials设置为true;
//vue
axios.defaults.withCredentials = true;
//node web服务器
ctx.set("Access-Control-Allow-Credentials", true);
正式IP地址通过nginx代理web服务器IP地址
问题:
在同IP地址下进行登录时不管带不带3000端口号都能向浏览器写入cookie,为什么不同的IP地址没办法写入cookie?
就算是在ctx.cookies.set配置中将domain设置为目标IP也无法写入,请问是什么原因造成的?有没有其他方案解决?
对vue的路由设置了mode: 'history'后我在服务器中使用了connect-history-api-fallback中间件,并将其放置在接口中间件前面,这会不会影响到这个问题?如果将其放置在接口中间后好像会因为还未从页面请求中写入token造成没有权限,陷入了一个死循环。
Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
domain:设置可以访问该Cookie的域名,但这个是针对子域名或父域名来说的