每次重新打开浏览器时,我的Node.js Web应用程序都会建立新会话

时间:2016-09-02 18:25:57

标签: node.js session express express-session connect-mongo

每次关闭所有浏览器窗口然后再次打开Web应用程序时,都会建立一个新会话,这意味着我必须再次进行身份验证。

供您参考,我使用express@4.14.0作为Web应用程序框架,express-session@1.14.1 + connect-mongo@1.3.2作为中间件来存储会话,使用passport@0.3.2进行身份验证。

以下是cookie和会话配置的代码:

// CookieParser should be above session
app.use(cookieParser());

// Express MongoDB session storage
app.use(session({
    resave: true,
    saveUninitialized: true,
    name: config.sessionName,
    secret: config.sessionSecret,
    store: new MongoStore({
        mongooseConnection: db.connection,
        collection: config.sessionCollection
    })
}));

" old"存储在MongoDB中的会话仍有两周的时间到期。

似乎Node.js应用程序无法识别" old"来自浏览器的会话,因此创建一个" new"一,告诉浏览器使用" new"之一。

它偶尔不会发生,但总是如此,所以我认为我的网络应用程序出了问题。

1 个答案:

答案 0 :(得分:0)

感谢@Bradley,最后我发现了什么是错误的。

这是我的解决方案

app.use(session({
    cookie: {
        maxAge: ms('14 days') // `ms` is a node module to convert string into milliseconds
    },
    resave: true,
    saveUninitialized: true,
    name: config.sessionName,
    secret: config.sessionSecret,
    store: new MongoStore({
        mongooseConnection: db.connection,
        collection: config.sessionCollection
    })
}));

有关详细信息,请参阅https://github.com/expressjs/session#expires

  

默认情况下,没有设置过期,大多数客户端会认为这是一个非持久性cookie"并将在退出Web浏览器应用程序的条件下删除它。

这就是我遇到这个问题的原因。