我目前正在为 ArangoDB (connect-arango) 开发 session 存储。它的工作方式几乎与 MongoDB session 存储(connect-mongo,因此为“connect-arango”)相同,但问题是 ArangoDB 没有为其条目内置 TTL。
MongoDB 有这个,而且这不是问题。但在 ArangoDB 中,我必须在 session 存储中的某个位置执行此操作。
每 60 秒检查一次过期 session (使用 setTimeout)是否足够,或者我应该使用其他方法,例如每次调用“get”函数时进行检查?
我将使用 AQL 查询来清除它们,类似于:
FOR s IN sessions
FILTER s.expires < DATE_NOW()
REMOVE s IN sessions
如果用户要清除他的 cookie,则永远不会使用“get”函数访问 session ,这意味着我无法检查 session 是否已过期。
但是,我可以做的是每次调用“get”函数时运行上述查询,但我认为这是完全没有必要的,并且会给服务器带来更多负载。
编辑:以免有人误解,我知道如何清除过期 session ,只是不知道运行清除功能的频率(在本例中,是上面的 AQL 查询)。
最佳答案
如果您将跳过列表索引设置为过期,则每 60 秒运行一次上述查询不会产生任何问题。您还可以在 ArangoDB 中创建一个定期作业,每分钟运行一次此查询。
Alan Plum 向 ArangoDB 添加了一个 session Foxx 应用程序,它基本上实现了上述所有功能。我不确定他是否已经发布了文档。 API 文档可见为
localhost:8529/_db/_system/_admin/aardvark/standalone.html#!/sessions
如果您对此 Foxx 应用程序有任何疑问,请随时联系 hackers (at) arangodb.org 的 Alan
关于node.js - NodeJS自定义session Store,清除过期session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607889/