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

参考

express-session

express-session中的resave和saveUninitialized

express session的填坑

posted @ 2021-07-28 10:09  暗恋桃埖源  阅读(707)  评论(0编辑  收藏  举报