node.jssessionstorearangodbnode.js-connect

NodeJS custom session Store, clear expired sessions


I am currently developing a session store for ArangoDB (connect-arango). It works almost identically to MongoDB session store (connect-mongo, hence 'connect-arango'), but the problem is that ArangoDB does not have a built in TTL for its entries.

MongoDB has this and it's not a problem there. But in ArangoDB, I have to do this in the session store somewhere.

Would checking for expired sessions every 60 seconds (using setTimeout) be sufficient, or should I use something else, like checking every time the "get" function is called?

I would use an AQL query to clear them, similar to this:

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

If the user were to clear his cookies, the session would never be accessed using the "get" function, which means I can't check if it has expired there.

What I can do however, is to run the above query every time the "get" function is called, but I think that would be quite unnecessary and put more load on the server.

Edit: Just so no one misunderstands, I know how to clear the expired sessions, I just don't know how often to run the clear function (in this case, it's the AQL query above).


Solution

  • If you put a skip-list index on expires, running the above query every 60 sec should not create any problems. You can also create a periodic job within ArangoDB that runs this query every minute.

    Alan Plum has added a session Foxx app to ArangoDB which basically implements all of the above. I'm not sure if he has already released a documentation. The API documentation is visible as

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

    If you have any questions about this Foxx application, please fell free to contact Alan at hackers (at) arangodb.org