【问题标题】:My Node.js web app establishes new session every time I reopen the browser每次我重新打开浏览器时,我的 Node.js Web 应用程序都会建立新会话
【发布时间】:2017-01-10 22:35:17
【问题描述】:

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

供您参考,我使用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
    })
}));

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

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

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

【问题讨论】:

  • 您需要将会话存储在 cookie 中,使用 cookie-parser
  • 刚刚编辑了问题,请参考。我已经在使用cookie-parser@1.4.3
  • 您的 cookie 生命周期可能设置为会话,这意味着当您关闭浏览器时,cookie 就会消失。

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


【解决方案1】:

感谢@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 浏览器应用程序等情况下将其删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多