0

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

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

下面是 cookie 和 session 配置的代码:

// 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
    })
}));

存储在 MongoDB 中的“旧”会话还有两周到期。

似乎 Node.js 应用程序无法从浏览器识别“旧”会话,因此创建一个“新”会话并告诉浏览器使用“新”会话。

它不会偶尔发生,但总是发生,所以我相信我的 Web 应用程序有问题。

4

1 回答 1

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 浏览器应用程序等条件下将其删除。

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

于 2016-09-03T09:50:53.740 回答