最近,我正在学习中间件"express-session"的快递,我想了解给定选项中的所有属性.但是当我读到关于API的时候express-session
,我很困惑这三个
属性:saveUninitialized
,resave
和rolling
.
它们都会对cookie设置或会话操作产生影响,那么它们的区别和联系是什么?
希望有人能帮助我区分它们,
非常感谢!
当现代浏览器发出请求时,它会在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
,secure
和HttpOnly
选项,这里都解释了)我正在简化,但默认情况下,express-session
只Set-Cookie
在第一次访问网站时发送.
如果rolling
是true
,它将每次发送.这具有期望的副作用,即每次刷新页面时连续向前滚动cookie的到期.新的到期日期是通过添加maxAge
到当前服务器时间来确定的.
如果您更改了req.session
对象,它将在请求结束时保存回会话存储区; 否则将无法保存.设置resave
以true
迫使它来保存每次,即使没有作出任何改变.这可能看似不合逻辑,但某些商店可能需要这个(虽然,通过查看列表,似乎目前没有).
第一次设置cookie时,会在内存中创建一个新的会话对象,并在请求结束时保存到存储中.如果您有许多人访问然后在没有执行任何有意义的操作(如登录)的情况下进行弹跳,则这会占用数据库中的大量空间.您可以选择仅在会话偏离默认会话对象时保存会话(即,如果您' req.session.user = user;
通过设置saveUninitialized
为修改它,如设置登录)false
.
需要注意的是,这些值的某些组合(以及其他值)可能会产生意外行为.例如,文档说明:
当此选项[rolling]设置为true但saveUninitialized选项设置为false时,将不会在具有未初始化会话的响应上设置cookie.
归档时间: |
|
查看次数: |
1210 次 |
最近记录: |