express - express cookie 未在响应中设置,未在下一个请求中显示
问题描述
有几个活动部件,所以很难知道在这里调试什么。
我在一个 localhost 端口上有一个 Web 应用程序,在另一个 localhost 上有一个简单的助手,它运行一个带有几个端点的 express NodeJS 应用程序。
我看到的基本问题是我在快速应用程序上的 cookie 会话对于后续调用是空的,我什至没有看到它在第一个响应中被发回。
设置
客户端对 express 应用程序进行基本的 GET ajax 调用(目前是 jQuery)。
我http
为会话 cookie 设置了限额:
app.use(cookieSession({
name: 'session',
keys: ['abcdefg'],
maxAge: 24 * 60 * 60 * 1000, // 24 hours,
secure: false
}))
我在 express 应用上设置了跨域请求:
app.use((req, res, next) => {
const corsWhitelist = [
'http://localhost:8000',
'http://localhost:8777'
];
if (corsWhitelist.indexOf(req.headers.origin) !== -1) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
}
next();
});
并且请求似乎没有问题地完成,因为响应机构是我所期望的。
请求处理程序的内容是:
app.get('/initialize', (req, res) => {
console.log(req.session);
//if we have a session with verified status
if (req.session.hasOwnProperty("userId") && req.session.userId){
res.send({result: 'OK', message: 'good - 1'});
return;
}
const id = uuid.v4();
req.session.userId = id;
res.send({result: 'OK', message: 'good - 2'});
return;
});
我总是从 ajax 调用中得到第二个响应“good - 2”。日志始终将会话显示为{}
可能值得注意的是,Chrome devtools 会为请求标头显示“显示临时标头”,而set-cookie
不是在响应标头中显示。AJAX 是对端点的简单 GET,其中传入一个参数。
更新
刚才我想到尝试不使用 AJAX 调用。直接点击 URL 获取 cookie 并按预期保持会话。这可能会改变问题的动态。
解决方案
解决方法是使用 jsonp 请求/响应来获取 cookie 以传递 ajax 调用。真的跟快递没关系。
https://samueleresca.net/2015/07/json-and-jsonp-requests-using-expressjs/
推荐阅读
- flask - sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,并且提供了 2
- javascript - ES6 中的扩展运算符在旧版 JavaScript 中转换为什么?它比 array.concat 贵吗?
- linux - 在当前分支中查看特定提交 ID 之前的 Git 历史记录
- c# - 了解 .NET 8.0 C# 示例中的 for 循环
- python - 我可以在子类方法中更改父类方法的默认行为吗?
- mysql - 来自单个控制器的多个模型
- javascript - 检查日期是否在未来三个月内
- typescript - 允许多个不同形状的接口作为 TypeScript 返回类型
- python - 并行运行 for 循环(特定)
- python - 我如何关闭 tkinter?