【发布时间】:2017-11-03 17:44:33
【问题描述】:
当我直接从浏览器调用/test 路由时,我发现会话已经正确设置。但是当我从 ajax 调用中执行相同操作时,我发现会话没有我之前通过其他路由 /temp 添加的信息。
快速会话配置
{
"key": "nsid",
"secret": "some secret password",
"cookie": {
"path": "/",
"httpOnly": false,
"maxAge": null,
"secure": false
},
"resave": true,
"saveUninitialized": true,
"proxy": null
}
routes.js
router.get('/temp', (req, res) => {
const useCase = 'card';
req.session = req.session || {};
req.session.trackingInformation = {};
req.session.trackingInformation.useCase = useCase;
req.session.save();
console.log(req.session);
res.render('/temp');
});
router.get('/test', (req, res) => {
console.log(Util.inspect(req.session));
res.send({});
});
ajax 调用
fetch('/test').then((response) => {
if (response.status >= 400) {
console.log(response.status);
}
return response.json();
}).then((json) => {
console.log(json);
//do something
});
当我调用 localhost:8000/temp 然后调用 /test 作为 fetch ajax 调用:
{
"cookie": {
"path": "/",
"_expires": null,
"originalMaxAge": null,
"httpOnly": false,
"secure": false
},
"_csrfSecret": "secret",
"_shared": {
"deviceInfo": {
...
}
}
}
trackingInformation 属性显然没有设置。但是如果我在第一次调用locahost:8000/temp 之后直接从浏览器localhost:8000/test 调用相同的,我在会话中设置了 trackingInformation。
{
"cookie": {
...
},
"_csrfSecret": "secret",
"_shared": {
"deviceInfo": {
...
}
},
"trackingInformation": {
"useCase": "card"
}
}
【问题讨论】:
标签: javascript node.js ajax session express