除了持久性之外,我只能发现旧会话的垃圾收集是不在生产网站中使用内存存储的原因......(即,我关闭浏览器,但会话仍然存储在服务器上的内存存储中)
我加入了类似这个简单的垃圾收集器的东西来解决这个问题:
var sessionGarbageCollector = function(req, res, next) {
// Set a session lifetime (Renewed each time this is called)
var now = new Date();
var expirydate = now.getime();
expirydate += 60000; // Some Session lifespan
req.session.LifeTime = expirydate;
req.session.sessionID = req.sessionID; // Make session ID accessible inside session
// Loop through all sessions and check for expired sessions
for ( var x in req.sessionStore.sessions ) {
req.sessionStore.get(x, function(err,sessionObj) {
if ( sessionObj.LifeTime ) {
if ( now.getTime() > sessionObj.LifeTime ) {
console.log("Removing Expired Sesson: " + sessionObj.sessionID);
req.sessionStore.destroy(sessionObj.sessionID, function(err,data) { } );
}
}
});
}
next();
}
然后我添加了以下内容,以便在每个请求上运行它 - 因此每次有人请求页面时,垃圾收集器都会检查是否应该删除任何会话:
app.use(sessionGarbageCollector);
现在可能,我不想每次都调用它,而只是在大约 10 分钟后或某个时间间隔后的请求时调用它......但这已经足够接近我想要的了。
(对于“保持登录”会话,我在客户端上覆盖会话密钥 cookie 的“仅会话”状态,并设置一个特定的到期日期 - 与
会话与 req.session.LifeTime,所以你得到保留的会话......好吧,如果没有人重新启动服务器......)我想知道这种方法还存在哪些我没有看到的问题? (即除了垃圾回收之外,Memory Store 还有哪些限制)
其他人对此有什么经验?也许其他人已经尝试过这种事情?