究竟是什么" saveUninitialized",#34; resave"和"滚动"快递中的属性?

时间:2016-01-15 03:34:30

标签: node.js express

最近,我正在学习中间件" express-session"快递,我想了解给定选项中的所有属性。但是当我读到express-session的API时,我与三个混淆了

属性:saveUninitializedresaverolling

它们都会对Cookie设置或会话操作产生影响,那么它们的区别和联系是什么?

希望有人能帮助我区分它们,

非常感谢!

1 个答案:

答案 0 :(得分:8)

当现代浏览器发出请求时,它会在Cookie标题中附加与当前域(网站)匹配的所有Cookie。以下是我访问stackoverflow.com时浏览器可能发送的示例:

Cookie: acct=1234

首次访问网站时,浏览器不会发送任何Cookie。在这种情况下(例如,如果所有者想要利用cookie来跟踪用户会话),服务器通常会使用Set-Cookie标题进行响应,如下所示:

Set-Cookie: acct=5678; expires=Sat, 15 May 2050 15:32:57 GMT; domain=.stackoverflow.com

(它还可以附加pathsecureHttpOnly个选项,全部解释为here)我正在简化,但默认情况下,express-session只在您第一次访问网站时发送Set-Cookie

如果rollingtrue,则每次都会发送maxAge。这具有期望的副作用,即在每次页面刷新时连续地向前滚动cookie的到期。新的到期日期是通过将req.session添加到当前服务器时间来确定的。

如果您更改resave对象,它将在请求结束时保存回会话存储区;否则将无法保存。将true设置为req.session.user = user;会强制每次都保存它,即使没有进行任何更改也是如此。这可能看似不合逻辑,但某些商店可能需要这样做(虽然看了清单,似乎目前没有商店)。

首次设置cookie时,会在内存中创建一个新的会话对象,并在请求结束时保存到存储中。如果您有许多人访问然后在没有执行任何有意义的操作(如登录)的情况下进行弹跳,则这会占用数据库中的大量空间。您可以选择仅在会话偏离默认会话对象时保存会话(即,如果您'通过将saveUninitialized设置为false来修改它,例如在登录时设置{{1}}。

需要注意的是,这些值(以及其他值)的某些组合可能会产生意外行为。例如,文档说明:

  

当此选项[rolling]设置为true但saveUninitialized选项设置为false时,将不会对未初始化会话的响应设置cookie。