编辑 - 使用 Chrome 网络检查器查看 cookie,似乎无论 cookie 的过期值是什么,浏览器都将其设置为会话 cookie 并根据请求将其删除。
我正在使用 Node.js 和 Express 为我正在教授的课程构建一个 CORS 示例。
但是,虽然 cookie 是从服务器设置的,但它们不会在以下请求中被发送回服务器。这几乎意味着我不能使用任何琐碎的会话管理器。
知道我在这里缺少什么吗?为什么浏览器不将域设置的 cookie 发送回该域?这不应该自动发生吗?
编辑 - 一些代码示例:设置 XHR 请求:
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.widthCredentials = true;
xhr.onreadystatechange = function(res){
if (xhr.readyState == 4){
cb(res,xhr);
}
};
xhr.setRequestHeader("Content-Type",'application/json');
xhr.setRequestHeader('Accept','application/json');
xhr.send(JSON.encode({param:some_param}));
服务器:
function allowCrossDomain(req,res,next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type,Accept,X-Requested-With');
if (req.method!='OPTIONS') return next();
res.send(204);
}
//while configuring express
app.use(allowCrossDomain)
还值得一提的是,我尝试了各种npm
中间件,它们做同样的事情,没有明显的区别
至于场景:
- 使用 XHR 发出 CORS 请求
- 服务器设置一个 cookie,正在成功发送回客户端(快速会话 cookie)
- 下一个 XHR 请求不会将该 cookie 发送回服务器,因此 express 无法识别用户,因此会创建一个新的会话 cookie,依此类推。