我一直在阅读关于如何管理会话的Connect和Express的源代码。我仍在学习会话的基础知识,但我不明白如何处理内存。
我知道服务器将会话数据保存在内存中,并使用会话ID来访问数据。服务器发送持有id的cookie(我猜测会话cookie?),当用户访问该站点时,会话再次被使用。
这是一个愚蠢的问题,但我的问题是内存是如何管理的,如果用户删除他的cookie或过期而不更新会话超时?数据是否永远留在内存中?
编辑:我刚看了PHP和其他语言,并看到了如何清理会话的文档。它们似乎有垃圾收集器(扫描并删除过期的会话)。 Connect / Express是否具有此功能?
答案 0 :(得分:3)
Connect MemoryStore
(Session
中间件的默认会话存储模块)将不垃圾收集过期会话。它仅在访问时检查其到期时间(此时将删除存储,如果会话已过期),因此如果用户清除其Cookie,会话将永远不会再次访问,永远不会从MemoryStore
到期。因此the warning at the Session
middleware docs MemoryStore
不应在生产中使用。
Connect不提供其他会话存储模块,并且希望您提供自己的会话存储模块,构建在Store
中间件附带的抽象Session
模块上。