gpt4 book ai didi

node.js - express-session 中 "saveUninitialized","resave"和 "rolling"属性的确切含义是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 22:39:11 25 4
gpt4 key购买 nike

最近,我在学习express的中间件“express-session”,我想了解给定选项中的所有属性。但是当我阅读express-session的API时,我对这三个感到困惑

属性:saveUninitializedresaverolling

它们都对cookie设置或session操作有影响,那么它们有什么区别和联系呢?

希望有人能帮我区分一下,

非常感谢!

最佳答案

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

Cookie:acct=1234

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

设置 Cookie:acct=5678; expires=2050 年 5 月 15 日星期六 15:32:57 GMT;域=.stackoverflow.com

(它还可以附加 pathsecureHttpOnly 选项,所有解释 here )我正在简化,但是,默认情况下,express-session 仅在您首次访问网站时发送 Set-Cookie

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

如果您更改req.session 对象,它将在请求结束时保存回 session 存储;否则它不会被保存。将 resave 设置为 true 会强制每次都保存它,即使没有进行任何更改。这可能看起来不合逻辑,但某些商店可能需要这样做(尽管查看了列表,目前似乎没有一家这样做)。

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

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

When this option [rolling] is set to true but the saveUninitialized option is set to false, the cookie will not be set on a response with an uninitialized session.

关于node.js - express-session 中 "saveUninitialized","resave"和 "rolling"属性的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34803966/

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