【问题标题】:Why don't mongodb session MongoStore's go away after session ends?为什么 mongodb 会话 MongoStore 在会话结束后不会消失?
【发布时间】:2012-08-12 07:55:44
【问题描述】:

即使有

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 中的会话永远存在(据我测试)

MongoDB 中的会话存储是否应该在会话结束后仍保留在那里?
因为即使在会话声明中使用 maxAge 或 expires,在 MongoDB 中,所有会话看起来都是这样的:

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

另外,在我的大部分 _id 中都有某种类型的非数字/字母字符,即 /、+ 等。它们应该是这样的吗?

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

谢谢, 布兰登

【问题讨论】:

    标签: node.js session mongodb express


    【解决方案1】:

    感谢您的解释,斯坦尼! 我发现我必须放

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

    而不是

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

    我在数据库中删除了旧会话集合(数据无关紧要,因为我只是在测试东西),所以现在我在测试时只能看到新会话。他们现在看起来应该是,并清除每个 clear_interval(相当于 connect-mongo 中的 reapInterval)

    【讨论】:

      【解决方案2】:

      MongoDB 中的会话存储是否应该在会话结束后仍保留在那里?

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

      假设您使用connect-mongodb 来保持会话,默认的reapInterval 应该每 60 秒触发一次过期会话的删除。

      由于您的会话到期设置为“null”,因此这些会话永远不会过期。会话到期应该与 cookie expires 值相同。因此,如果未设置,您可能需要进行一些调试以跟踪问题。

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

      另外,在我的大部分 _id 中都有某种类型的非数字/字母 字符,即/、+等。它们应该是这样的吗?

      是的,Express sessionID 是 24 个字符长的字母数字字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        相关资源
        最近更新 更多