我是MEAN堆栈的新手。我阅读了 express-session github 文档,但有一些我不清楚的选项。这些选项是 saveUninitialized
和 resave
。
谁能 举例 说明使用 saveUninitialized
和 resave
的优点是什么,如果我们更改这些选项中的布尔值会有什么影响。
句法:-
app.use(session({
resave: false,
saveUninitialized: true,
}))
原文由 user7104874 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我们假设会话是全局启用的(对于所有请求)。
当客户端发出 HTTP 请求并且该请求不包含会话 cookie 时,将由
express-session
创建一个新会话。创建一个新会话会做一些事情:req.session
saveUninitialized
的值,在请求结束时,会话对象将存储在会话存储中(通常是某种数据库)如果在请求的生命周期中会话对象没有被修改,那么在请求结束时,当
saveUninitialized
为 false 时,(仍然为空,因为未修改)会话对象将不会存储在会话存储。这背后的原因是,这将防止在会话存储中存储大量空会话对象。由于没有什么有用的存储,会话在请求结束时被“遗忘”。
您想何时启用此功能?例如,当您希望能够识别重复访问者时。您将能够识别出这样的访问者,因为他们发送了包含唯一 ID 的会话 cookie。
关于
resave
:这可能必须为不支持“touch”命令的会话存储启用。这样做是告诉会话存储特定会话仍然处于活动状态,这是必要的,因为某些存储会在一段时间后删除空闲(未使用)的会话。如果会话存储驱动程序没有实现 touch 命令,那么您应该启用
resave
以便即使在请求期间会话没有更改,它仍然在存储中更新(从而将其标记为活动)。因此,如果您需要启用此选项,这完全取决于您使用的会话存储。