node.js - Connect-mongo session 不会被自动删除

标签 node.js session mongodb express connect

我有一个使用 NodeJS、Express、MongoDB 和 connect-mongo 的应用程序。

我的问题是 session 过期时似乎不会自动从 MongoDB 中删除,因此 db 大小会增长直到磁盘已满。

connect-mongo的开发者wrote a comment :

connect-mongo will ask MongoDB to remove all the sessions that have expired before the current date.

但这似乎并没有发生在我的案例中。

我的配置是:

var express = require('express');
var MongoStore = require('connect-mongo');

var sessionStore = new MongoStore({db: 'myappsession'});

var app = express.createServer();

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({ secret: "myappsecret", store:sessionStore }));
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

我目前正在运行以下版本:

  • Node : 0.7.0-pre
  • connect-mongo: 0.1.7
  • express : 2.5.2
  • 连接: 1.8.5

最佳答案

您还没有设置 clear_interval对于您的 session .. connect-mongo 默认值为 -1(或“从不”):

clear_interval Interval in seconds to clear expired sessions (optional, default: -1). Values <= 0 disable expired session clearing.

每小时(3600 秒)删除过期 session 的示例:

var sessionStore = new MongoStore({
     db: 'myappsession',
     clear_interval: 3600
});

您还应该确保已在 session 上设置了 maxAge 以使其实际过期(例如使用 1 天):

app.use(express.session({
    secret: "myappsecret",
    cookie: { maxAge: 24 * 60 * 60 * 1000 },
    store:sessionStore
}));

关于node.js - Connect-mongo session 不会被自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081741/

相关文章:

java - 杀死用户 session

macos - mongodb,macos - 限制警告

node.js - 通过 UDP 和 Node.js 通过 WAN 在两台计算机之间传递 OSC 消息

javascript - 当我流式上传文件时,尽管传递了磁盘存储位置参数,但内存缓冲区已满

java - 在 session 中保存模型

javascript - 1 天前的文档从 mongodb 获取

MongoDB 文本搜索过滤多个字段

android - 确保安装时使用的Node.js版本与运行时使用的版本匹配

node.js - 为什么 webpack 在运行 npm run dev 时会报错

php - 如何创建一个按钮来关闭 joomla 2.5 中的事件 session