Express-session不会删除以前的会话

问题描述 投票:0回答:1

我目前正在研究一个新项目,并且我在快速会话库中使用会话。

这是我设置会话的代码:

const IN_PROD = process.env.MODE==='production'
app.use(session({
    name: 'sid',
    secret: 'asecret',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        collection: 'sessions'
    }),
    saveUninitialized: false,
    resave: false,
    cookie: {
        sameSite: true,
        secure: IN_PROD,
        expires: new Date(new Date().getTime() + 1000 * 60 * 60 * 24)
    }
}))

想象以下步骤:

1)我的服务器将cookie中的会话ID(sid = A)发送给我的客户端。

2)客户端手动删除cookie

3)在下一个请求时,客户端发送另一个会话ID(sid = B)

A和B cookie都存储在数据库中并且不覆盖第一个cookie是正常的吗?

node.js express cookies session-cookies express-session
1个回答
0
投票

是正常的。它取决于您或您用来清除较旧会话的会话存储。

如果您查看MongoStore()文档,您会发现它具有与automatic removal of session objects相关的若干功能。

这里是一个例子:

// connect-mongo will take care of removing expired sessions, using defined interval.

app.use(session({
    store: new MongoStore({
      url: 'mongodb://localhost/test-app',
      autoRemove: 'interval',
      autoRemoveInterval: 10 // In minutes
    })
}));

请记住,在快速会话级别,会话只是与cookie相关的数据的一滴。每当浏览器向您的服务器发出请求并且不存在会话cookie时,都会创建一个新的会话cookie并将新的express-session对象连接到该新cookie。

如果用户随后删除该cookie并再次连接到您的服务器,则express-session不知道此浏览器与上一个会话是同一浏览器。原始cookie是唯一可以知道的方法,并且cookie现在不见了。因此,express-session只会看到一个新的浏览器连接到没有会话cookie的服务器,因此它将创建一个新的cookie,然后创建一个新的会话对象。

已登录用户与快速会话的任何关联都在您的应用程序级别完成(通过将用户标识信息放入会话对象中,而快速会话完全不知道这一点。

© www.soinside.com 2019 - 2024. All rights reserved.