Node.js Connect/Express如何管理内存中的会话

3

我对 Connect 和 Express 的源代码进行了一些阅读,了解了会话的管理方式。我仍在学习会话的基础知识,但我不明白内存是如何处理的。

我知道服务器将会话数据保存在内存中,并使用会话 ID 来访问数据。服务器发送包含 ID 的 cookie(我猜是会话 cookie?),当用户访问网站时,会话再次被使用。

这是一个愚蠢的问题,但我的问题是,如果用户删除了 cookie 或者会话超时而没有更新,内存是如何管理的?数据会永远保留在内存中吗?

我查看了 PHP 和其他语言的文档,发现它们有清理会话的说明。它们似乎有一个垃圾收集器(扫描并删除过期的会话)。Connect/Express 是否具备此功能?


我希望它不会这样做。 - 3on
1个回答

4
连接MemoryStoreSession中间件的默认会话存储模块)不会清除已过期的会话。只有在访问时才检查它们的过期时间(此时,如果会话已过期,它将删除存储),因此如果用户清除其cookie,则会话将永远不会被访问,并且永远不会从MemoryStore过期。因此,在Session中间件文档中警告不应在生产中使用MemoryStore
Connect不提供其他会话存储模块,希望您自己提供,并构建在包含在Session中间件中的抽象Store模块上。

好的,谢谢。我猜做法是运行一个setTimeout计时器来扫描会话对象并清理它? - user654628
最好实现自己的模块,继承自“Store”,并以一种允许您轻松查找过期会话的方式实现存储。 - lanzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接