问题描述
我准备在middleware中获取存储在cookie中的token参数
本地测试时没有发现问题,
但上传到正式服务器一段时间后发现有些用户出现了token相同的情况
检查后发现是因为多个用户在同时请求了服务器,触发的middleware可能被重写了(不清楚应该怎么描述)
问题出现的环境背景及自己尝试过哪些方法
当多个用户同时请求时页面时,
middleware 中的 context.req.headers.cookie字段的值是相同的
最开始以为是自己保存的临时变量被服务器重复查询,删除后发现问题依旧
相关代码
let getCookie = (cname, cookie) => {
let name = cname + "=";
let ca = cookie.split(';');
let cname_index = cookie.indexOf(name)
if (cname_index >= 0) {
for (let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
} else {
return null;
}
}
export default (context) => {
if (context.route.name) {
context.marsToken = getCookie("MarsToken", process.server ? (context.req.headers.cookie || "") : (document.cookie || ""));
context.store.commit("SAVETOKEN", context.marsToken);
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
想问一下为什么会出现这种情况,是因为node无法处理并发请求,如果能,我应该怎么改进?
还是说框架的问题?
我也出现了相同的问题, 尤其是用 location.href 跳转的时候,store 中的 Token 就跟别人混了,我们业务又涉及到了切换域名,不得不跳,所以特别坑。 据我观察一旦使用了 locatio.href ,那么 nuxtServerInit 会再次初始化一遍,可能就是这个问题导致的。
如果域名相同,尽量用 nuxt-link 去做跳转,如果跳二级域名的话,实在不行在二级域名的首页从 cookie 里面取一下 token,重新设置到store 中。