Session 快速会话存储和reapInterval
我有一个关于设置reapInterval值的express会话存储内存的问题。我有一个示例代码,它将每5秒输出一个memorystore的值。如果我现在将reapinterval设置为5000,它应该每5秒清理一次过期会话,对吗?因此,我的示例如下所示:Session 快速会话存储和reapInterval,session,node.js,express,Session,Node.js,Express,我有一个关于设置reapInterval值的express会话存储内存的问题。我有一个示例代码,它将每5秒输出一个memorystore的值。如果我现在将reapinterval设置为5000,它应该每5秒清理一次过期会话,对吗?因此,我的示例如下所示: /** * Module dependencies. */ var express = require('express'); var app = module.exports = express.createServer(); var
/**
* Module dependencies.
*/
var express = require('express');
var app = module.exports = express.createServer();
var MemStore = require('express/node_modules/connect/lib/middleware/session/memory');
var store = new MemStore({reapInterval: 5000});
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret: 'your secret here', store: store, cookie: {maxAge: 30000}}));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
setInterval(function(){
console.log(new Date());
console.log(store);
}, 5000);
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', function(req, res){
res.render('index', {
title: 'Express'
});
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
现在的问题是,如果我在30秒后重新访问页面,我会得到一个新的SID,但memorystore中的旧会话仍然存在。。。是否应该每5秒检查一次并删除
谢谢你的帮助 所以第一个问题是误解。雷平特瓦尔什么也不做。MemoryStore根据会话cookie的过期时间清除cookie。所以实际上内存存储中有一个bug。在我看来,断流是这样的
- 将cookie设置为在X中过期
- 获取会话数据,X是否经过?不,好的
- (cookie过期)
- 获取会话数据,会话不存在,生成新会话
- X已通过,但缺少会话ID,因为浏览器已将其过期
“我想短时间的cookie会话会被搞砸的”-visionmedia为什么还要为此烦恼?在生产环境中,您可以使用诸如connect redis或connect mongo之类的工具进行会话存储:)解决这个问题运气好吗?我遇到了同样的问题。您还可以查看
MemoryStore.prototype.get
来了解这是如何工作的。