为什么在会话结束之后,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)