2013-12-09 45 views
1

我可能只是不明白Express如何管理会话,但当我将会话设置为在7天后过期时In Express Express Session Cookie Expires Too Early

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被设置为过期,而不是指定的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天内正确过期;这是否也会在7天内过期服务器上的会话?我原以为这两个是默认耦合的。

对于奖励积分;在制作过程中,会话将存储在Redis或类似文件中,但在开发过程中,我将它们存储在内存中。有没有办法让我可以看到这些数据以验证它何时也会过期?

对于更多点!我相信这些会议默认不是'滚动'的吗?我读过req.session.touch()会重置会话;这是否会重置会话cookie的TTL呢?如果不是,你会如何建议我'滚动'会议

该会话最初设置为7天。 第3天,用户返回,会话过期重置为此次访问后的7天。 等等

因此,用户可以有永久会话,只要他们在任何滚动7天内都处于活动状态。

一如既往,非常感谢帮助!

回答

0

MemoryStore是默认的,它非常简单,并且不支持TTL。

source code

如果你想获得MemoryStore的,只是不喜欢这样:

var ms = new MemoryStore(); 
app.use(express.session({ 
    store: ms 
    ... 
}))' 

ms.all(function (err, array_of_session) { 
    console.log(array_of_session); 
}); 

您应该使用Redis的或蒙戈来存储会话。例如connect-mongo,它支持TTL和副本集。 https://github.com/kcbanner/connect-mongo

会话滚动? 没有,你可以自己做

阅读本 https://github.com/senchalabs/connect/issues/670

相关问题