在快递会话中"saveUninitialized","resave"和"rolling"属性的含义是什么?

Win*_*der 5 node.js express

最近,我正在学习中间件"express-session"的快递,我想了解给定选项中的所有属性.但是当我读到关于API的时候express-session,我很困惑这三个

属性:saveUninitialized,resaverolling.

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

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

非常感谢!

Ale*_*sne 9

当现代浏览器发出请求时,它会在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

(它也可以附加path,secureHttpOnly选项,这里都解释)我正在简化,但默认情况下,express-sessionSet-Cookie在第一次访问网站时发送.

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

如果您更改了req.session对象,它将在请求结束时保存回会话存储区; 否则将无法保存.设置resavetrue迫使它来保存每次,即使没有作出任何改变.这可能看似不合逻辑,但某些商店可能需要这个(虽然,通过查看列表,似乎目前没有).

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

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

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