NodeJS自定义会话存储,清除过期的会话

时间:2014-12-22 17:52:54

标签: node.js session store connect arangodb

我目前正在为ArangoDB开发会话存储(connect-arango)。它几乎与MongoDB会话存储(connect-mongo,因此' connect-arango')的工作方式相同,但问题是ArangoDB的条目没有内置的TTL。

MongoDB有这个,它不是问题。但是在ArangoDB中,我必须在某个会话存储区中执行此操作。

每隔60秒(使用setTimeout)检查过期会话是否足够,或者我应该使用其他内容,例如每次检查" get"函数被称为?

我会使用AQL查询来清除它们,类似于:

FOR s IN sessions
  FILTER s.expires < DATE_NOW()
  REMOVE s IN sessions

如果用户要清除他的cookie,则永远不会使用&#34; get&#34;来访问会话。功能,这意味着我无法检查它是否已经过期。

然而,我可以做的是每次&#34; get&#34;运行上述查询。函数被调用,但我认为这是非常不必要的,并且会给服务器带来更多的负担。

编辑:就这样没有人误解,我知道如何清除过期的会话,我只是不知道运行clear函数的频率(在这种情况下,它是上面的AQL查询)

2 个答案:

答案 0 :(得分:2)

如果您将过期列表索引置于过期,则每60秒运行上述查询不应产生任何问题。您还可以在ArangoDB中创建每分钟运行此查询的定期作业。

Alan Plum已经向ArangoDB添加了一个会话Foxx应用程序,它基本上实现了上述所有功能。我不确定他是否已经发布了文档。 API文档显示为

localhost:8529/_db/_system/_admin/aardvark/standalone.html#!/sessions

如果您对此Foxx应用程序有任何疑问,请随时联系Alan,黑客(at)arangodb.org

答案 1 :(得分:0)

从ArangoDB 2.3开始,Foxx附带了一个内置的会话应用程序,您可以在Foxx应用程序中使用它。即使您不想使用Foxx,也可以重新使用会话应用程序。

您只需在您选择的安装点上安装会话应用的副本即可。这允许您配置会话TTL以及其他详细信息(例如会话ID的长度)。该应用程序公开了一个HTTP API,允许您创建新会话,更新会话,检索现有会话并删除它们。当您尝试检索或更新会话时,它自动执行TTL (即删除过期的会话)。

目前只有在访问会话时才会强制执行TTL。根据您的使用情况,这可能会使过期会话的集合变得混乱。目前,无法直接在ArangoDB内安排重复任务;有一个工作队列,但它不适合这种问题。这可能会在ArangoDB的未来版本中得到解决。

我建议随着时间的推移监控堆积在会话应用的已安装副本集合中的过期会话数量。它可能足以每周修剪一次过期的会话(甚至更少)。由于会话应用会在通过其API访问过期时自动删除过期会话,唯一的问题是被放弃的会话(例如隐私浏览模式或一次性用户)。

披露:我编写了ArangoDB 2.3中引入的新会话/ auth应用程序。