【发布时间】:2018-07-12 23:16:37
【问题描述】:
我的express-session 工作正常,我用一个非常短的 cookie 最大使用时间(10 秒)对其进行了测试,它按预期工作:
app.use(session({
secret: 'xxx',
resave: false,
saveUninitialized: true,
cookie: { secure: true, maxAge: 10000 }
}));
奇怪的是,我在 Chrome 开发者工具中的任何地方都找不到 cookie。 express-session设置的cookie隐藏在哪里?
更新 #2: See my own answer 如果您想知道在哪里可以看到 cookie,如果您将 ajax request 发送到另一个域上的 express server。
更新 - 我的快速服务器上的会话管理:
app.post('/verify', function(req, res){
let out = [];
if(!req.session.userId){
if(typeof req.body.token !== 'undefined'){
admin.auth().verifyIdToken(req.body.token)
.then(function(decodedToken) {
let uid = decodedToken.uid;
if(!req.session.userId){
req.session.userId = uid;
}
res.send(uid);
// ...
}).catch(function(error) {
// Handle error
res.send(error);
});
}else{
res.send('no token received');
}
}else{
res.send('already logged in by session with uid: ' + req.session.userId + ' | session id: ' + req.session.id);
}
});
这就是服务器“启动”的方式:
app.listen(port, function () {
console.log('Example app listening on port ' + port + '!');
});
问题是会话有效,但我看不到 cookie:
【问题讨论】:
-
看来,您在代码中使用了
http服务器。但正如您在我的回答中看到的那样,如果您使用cookie.secure,则需要使用https!请验证您的服务器设置以确保或使用不安全的 cookie。 -
@eisbehr 谢谢你,我会试试看的——但是为什么那些黑客仍然可以工作呢? - 那是我不明白的。
-
嗯,这属于你所说的“它有效”。会话本身将按预期工作。它可以在会话中读取和保存数据。唯一的事情是 cookie 的存储。连接关闭后,您将直接丢失数据。不同浏览器显示相同行为的事实表明某处仍然存在问题......
-
@eisbehr 是的,但据我所知,会话只能由似乎不存在的 cookie 识别。
-
您是否曾在我的答案中测试过我的示例代码?这也是有效的吗?
标签: javascript node.js express express-session