express-session 选项 resave, rolling, saveUninitialized
express-session
的三个 resave
, rolling
, saveUninitialized
option
的解释
option.resave
默认值为 true
, 但也需要显示设置为 true
, 因为 express
后期可能会修改默认值为 其它的值. 不然 express-session
会报一个警告.
作用: 强制每次都将 session
保存回 session store
,即使在请求期间从未修改 session
。取决于你的 store
这可能是必要的,
但它也可以创建竞态条件,客户让两个并行请求您的服务器,在一个请求中更改 session 可能会覆盖另一个请求结束时,即使它没有改变(这种行为也取决于您使用的 store
)
option.rolling
默认值为 false
, 但也需要显示设置, 因为 express
后期可能会修改默认值为 其它的值. 不然 express-session
会报一个警告.
作用: 当设置为 为 true
时, response
上会添加 header
Set-Cookie
, 每次重新设置过期时间为 maxAge
(自动续命),
重新设置 session cookie,假设你的 cookie 是10分钟过期,每次请求都会再设置10分钟.
场景:
比方说我上午登录的淘宝,中午下班我去吃饭了,中午回来之后刷新网页,登录显示超时,需要重新登录。但是假如我比较敬业中午不吃饭了,一直在刷淘宝,午饭时间已经过了,其他同事纷纷回来了,但是这时我的淘宝并没有退出,一直是登录状态,中间不需要重新登录,这是为什么呢?
总结这个场景发现两种情况:
1、登陆淘宝后,一段时间未刷新网页,会自动退出
2、登陆淘宝后,一直在浏览淘宝信息,一直刷新,跳转网页,就不会退出。
为什么会出现上面两种情况呢?
相信有部分同学已经猜到了,session设置一般有个过期时间,在express-session中是通过maxAge来设置。
时间到期之后,session会被自动删除,需要重新登录,比方说淘宝设置session保存1小时,我从登录开始,一小时后,session会被删除,但是现实是如果我一直在浏览淘宝的页面,一小时后并不会删除,而是一小时之内我不去刷新淘宝页面就会将session删除。
为什么会这样呢?这是因为,session的计时设置是根据:用户最后一次请求开始计算,这就需要用户每次请求都需要修改session的保存时间。
那在express中如何设置呢?将express-session的rolling的值设置为ture即可,这个值默认为false,需要手动开启
option.saveUninitialized
默认值为 true
, 但也需要显示设置为 true
, 因为 express
后期可能会修改默认值为 其它的值. 不然 express-session
会报一个警告.
作用: 当为 true
用户不论是否登录网站,只要访问网站都会生成一个 session
,只不过这个 session
是一个空的 session
,
无论有没有 session cookie
,每次请求都设置个 session cookie
,默认给个标示为 connect.sid