【问题标题】:Express session store and reapIntervalExpress session store 和 reapInterval
【发布时间】:2012-07-18 10:15:59
【问题描述】:

我有一个关于设置 reapInterval 值的快速会话存储内存的问题。我有一个示例代码,它将每 5 秒输出一次内存存储的值。如果我现在将重新设置间隔设置为 5000,它应该每 5 秒清理一次过期的会话,对吗?所以我的例子是这样的:

/**
 * 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 秒检查一次并删除它吗?

感谢您的帮助!

【问题讨论】:

  • 为什么还要为此烦恼?在生产中,您将使用 connect-redis 或 connect-mongo 之类的东西进行会话存储? :)
  • 运气好能解决这个问题吗?我遇到了同样的问题。

标签: session node.js express


【解决方案1】:

所以第一个问题是这里的误解。 reapInterval 不做任何事情。 MemoryStore 根据会话 cookie 的过期时间清除 cookie。所以实际上在 Connects MemoryStore 中有一个 bug。在我看来,中断的流程是这样的。

  • 在 X 中设置 cookie 过期。
  • 获取会话数据,X 过去了吗?不,好的。
  • (cookie 过期)
  • 获取会话数据,会话不存在,生成新的。
  • X 已经过去,但会话 ID 丢失,因为浏览器已经过期。

这里有关于这个的讨论。

https://github.com/senchalabs/connect/issues/328

和一个多汁的报价

“我猜短的 cookie 会话会搞砸”--visionmedia

【讨论】:

  • 您也可以查看MemoryStore.prototype.get 了解其工作原理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2018-03-07
  • 2014-06-27
  • 2019-05-14
  • 2016-03-02
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多