UNPKG

1.44 kBJavaScriptView Raw
1"use strict";
2
3const Store = require('express-session/session/store');
4const defer = require('../helper/defer');
5
6/**
7 * In memory session store.
8 *
9 * Apparently the default session store is not menat to be used for prouction
10 * or something.
11 *
12 * Will not scale horizontally.
13 */
14class MemorySessionStore extends Store
15{
16
17 /**
18 * @param {object} options see fields
19 */
20 constructor(options = {})
21 {
22 super();
23
24 /**
25 * In memory sessions list.
26 */
27 this.sessions = {};
28
29 /**
30 * Session dueation
31 */
32 this.sessionsTTL = options.sessionsTTL || 8 * 60 * 60 * 1000;
33 }
34
35 /**
36 * clean up expired sessions
37 * @protected
38 */
39 cleanup()
40 {
41 for (let sessionId in this.sessions)
42 {
43 let session = this.sessions[sessionId];
44
45 if (session)
46 {
47 if (session.expires < Date.now())
48 {
49 delete this.sessions[sessionId];
50 }
51 }
52 }
53 }
54
55 /**
56 * @override
57 */
58 get(sessionId, callback)
59 {
60 this.cleanup();
61 defer(callback, null, this.sessions[sessionId]);
62 }
63
64 /**
65 * @override
66 */
67 set(sessionId, session, callback)
68 {
69 this.cleanup();
70 this.sessions[sessionId] = session;
71 session.expires = Date.now() + this.sessionsTTL;
72 defer(callback);
73 }
74
75 /**
76 * @override
77 */
78 destroy(sessionId, callback)
79 {
80 delete this.sessions[sessionId];
81 defer(callback);
82 }
83}
84
85module.exports = MemorySessionStore;