为什么在会话结束之后,MongoStore的MongoStore会不走呢?

即使

app.use(express.session({ secret: conf.secret, maxAge : new Date(Date.now() + 360000), expires: new Date(Date.now() + 360000),//I've tried both separately store : new MongoStore(conf.db), })); 

在mongodb会议永远留下(据我testing)

即使在会话结束之后,会话存储在MongoDB中应该保持在那里吗?
因为即使maxAge或会话声明过期,在MongoDB中,所有的会话都是这样的:

 { "_id" : "FU8k3kEzquG/hoSD308H5XHa", "session" : "{\"cookie \":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true, \"path\":\"/\"}}" } 

另外,在我的大部分_id中都有一些非数字/字母的字符,比如/,+等。他们应该是这样吗?

每当我重新打开浏览器时,都会创build一个新的会话,但是旧的会话仍然在MongoDB中。 我只是想知道这是否有解决办法,或者这是故意的。

谢谢,布兰登

即使在会话结束之后,会话存储在MongoDB中应该保持在那里吗?

如果浏览器的cookie过期,但是会话信息已经保存在持久的后端数据存储(如MongoDB)中,这是预期的行为。 两个数据存储(后端与基于浏览器的cookie)可以有不同的到期date。

假设您正在使用connect-mongodb来保持会话,则默认的reapInterval应该每60秒触发删除已到期的会话。

由于会话过期设置为“空”,因此这些会话永远不会过期。 会话过期应该与cookie的expires值相同。所以如果没有设置,你可能需要做一些debugging来追踪问题。

在尝试设置maxAge之前,可能会保存旧会话; 我会检查是否新的会议设置expires如你所料。 如果是这样,您可能需要手动删除一些较旧的非过期会话。

另外,在我的大部分_id中都有一些非数字/字母的字符,比如/,+等。他们应该是这样吗?

是的,Express会话ID是长度为24个字符的字母数字string。

感谢Stennie的解释! 我发现我不得不放

 cookie: { maxAge: new Date(Date.now() + 360000)} 

代替

 maxAge : new Date(Date.now() + 360000) //or expires: new Date(Date.now() + 360000) 

我把我的旧会话集合放在我的数据库中(数据不重要,因为我只是testing的东西),所以现在我只能看到新的会话,而testing。 他们现在看起来应该是,并清除每个clear_interval(相当于connect-mongo中的reapInterval)