关于express-session 的一个问题
express-session 中的resave 的属性的作用是什么呢官方文档这样直译过来
:强制session保存到session store中。即使在请求中这个session没有被修改。但是这个并不一定是必须的,如果客户端有
两个并行的请求到你的客户端,一个请求对session的修改可能被另外一个请求覆盖掉,即使第二个请求并没有修改sesion。
默认是true,但是默认值已经过时,因此以后default可能会被修改。因此好好研究你的需求选择一个最适用的。大多数情况下你可能需要false
最好的知道你的store是否需要设置resave的方法是通过查看你的store是否实现了touch方法(删除那些空闲的session。同时这个方法也会通知session store指定的session 是活动态的),如果实现了那么你可以用resave:false,如果没有实现touch方法,同时你的store对保存的session设置了一个过期的时间,那么建议你用resave:true
我的理解是 某个客户端有两个请求,第一个请求修改了session第二个没有修改,会将第一个修改的session覆盖掉从而结果就是没有修改session
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
并发请求会导致的session不一致,因为设置了resave选项为true后(默认为true),默认在你每次调用res.send方法发送响应的时候会执行一次req.session.save,所以不管这两个请求修没修改session,最后默认存储session的store里的值会是最后执行res.send方法也就是响应最慢的那个请求中session最后的值。
参考链接