我可能不太明白 Express 是如何管理 session 的,但是当我将 session 设置为 7 天后过期时,例如
app.configure(function () {
app.set(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
secret: ''
}));
});
Cookie 设置为在浏览 session 结束时过期,而不是指定的 7 天。
如果我更改上面的代码,例如
app.configure(function () {
app.set(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
cookie: {
expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
},
secret: ''
}));
});
cookie正确设置为7天后过期;这是否也会使服务器上的 session 在 7 天后过期?我本以为两者默认是耦合的。
奖励积分;在生产中, session 将存储在 Redis 或类似设备中,但在开发过程中,我将它们存储在内存中。有没有办法让我看到这些数据来验证它何时过期?
获得更多积分!我相信 session 默认情况下不是“滚动”的?我读到 req.session.touch()
将重置 session ;这是否也会重置 session cookie 的 TTL?如果没有,您建议我如何“滚动” session ,例如
session 最初设置为 7 天。 在第 3 天,用户返回, session 过期时间重置为自本次访问起的 7 天。 等等
因此,用户可以拥有永久 session ,只要他们在任意滚动 7 天内活跃一次即可。
一如既往,非常感谢您的帮助!
最佳答案
MemoryStore是默认的,很简单,而且不支持TTL。
如果你想访问MemoryStore,只需这样做:
var ms = new MemoryStore();
app.use(express.session({
store: ms
...
}))'
ms.all(function (err, array_of_session) {
console.log(array_of_session);
});
应该使用redis或mongo来存储session。例如connect-mongo,它支持TTL和副本集。 https://github.com/kcbanner/connect-mongo
session 滚动? 不,你可以自己做
关于node.js - 在 Express 中, session Cookie 过期太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471733/