警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程

Gin*_*xxx 13 javascript cookies session memory-leaks node.js

这里的好日子是我的代码:

var express = require('express');
var session = require('express-session');

var app = express();
app.set('trust proxy', 1);

app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: false,
maxAge: 1000 * 60 * 15,
cookie:{
    secure: true
       }
}));
Run Code Online (Sandbox Code Playgroud)

这段代码总是在我的日志中返回a:

警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程.

我试着用谷歌搜索它,但我似乎不理解一些教程.对不起,我的英语不好.

Geo*_*los 8

使用cookie-session而不是express-session为我解决了这个问题。

您将会话存储在客户端上,而不是使用 cookie 存储在服务器上。

简单地:

  1. 安装它 npm install cookie-session
  2. 改变

    var session = require('express-session');

    var session = require('cookie-session');


Gin*_*xxx 5

我希望这对与我一样困扰同样问题的人有所帮助。自己挖。

//-momery unleaked---------
app.set('trust proxy', 1);

app.use(session({
cookie:{
    secure: true,
    maxAge:60000
       },
store: new RedisStore(),
secret: 'secret',
saveUninitialized: true,
resave: false
}));

app.use(function(req,res,next){
if(!req.session){
    return next(new Error('Oh no')) //handle error
}
next() //otherwise continue
});
Run Code Online (Sandbox Code Playgroud)

  • 如果您做一些解释,将更加有帮助!! ...由于您使用RedisStore(),所以Mongodb呢? (14认同)
  • 问题是,将会话数据存储在内存中并不安全。它没有以任何方式加密或保护。此外,每次服务器重新启动时,所有会话数据都将消失,用户将不得不重新登录。此外,您将来无法扩展您的应用程序,因为会话数据本地存储在内存中,并且无法由远程运行或作为单独进程在同一主机上运行的应用程序的其他实例访问使用外部会话存储有助于解决问题这些问题。Redis 就是一个可以做到这一点的数据库。MongoDB 也可以工作。 (2认同)

小智 5

这都是关于存储会话的,您应该添加一个将会话存储到数据库中的存储系统。这有助于您的应用程序管理会话。

例如,在 mongodb 中您可以使用 connect-mongo,您应该找到一个存储包并用于其他数据库。

https://www.npmjs.com/package/connect-mongo

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

app.use(session({
    secret: 'foo',
    store: new MongoStore(options)
}));
Run Code Online (Sandbox Code Playgroud)