gpt4 book ai didi

node.js - 快速 session 不删除以前的 session

转载 作者:行者123 更新时间:2023-12-05 02:54:34 25 4
gpt4 key购买 nike

我目前正在开发一个新项目,我使用 express-session 库的 session 。

这是我设置 session 的代码:

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 中向我的客户端发送一个 session ID (sid=A)。

2)客户端手动删除cookie

3) 在下一次请求时,客户端发送另一个 session id (sid=B)

A和B的cookie都存入数据库,第一个没有被覆盖,这正常吗?

最佳答案

这是正常的。这取决于您或您用来清理旧 session 的 session 存储。

如果您查看 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
})
}));

请记住,在快速 session 级别, session 只是与 cookie 关联的数据 block 。任何时候浏览器向您的服务器发出请求并且不存在 session cookie 时,都会创建一个新的 session cookie 和一个连接到该新 cookie 的新的快速 session 对象。

如果用户随后删除该 cookie 并再次连接到您的服务器,则 express-session 不知道该浏览器与前一个 session 是同一个浏览器。原来的 cookie 是它知道的唯一方式,而 cookie 现在已经消失了。因此,express-session 只看到一个新的浏览器连接到您的服务器,但没有 session cookie,因此它创建一个新的 cookie,然后创建一个新的 session 对象来配合它。

登录用户与快速 session 的任何关联都是在您的应用程序级别完成的(通过将用户身份信息放入 session 对象)并且快速 session 根本不知道这一点。

关于node.js - 快速 session 不删除以前的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61742632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com