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

问题描述 投票:0回答:4

大家好,这是我的代码:

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
       }
}));

此代码总是在我的日志中返回:

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

我尝试用谷歌搜索它,但我似乎不明白一些教程。 抱歉我的英语不好。

javascript node.js session cookies memory-leaks
4个回答
24
投票

使用

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

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

简单地说:

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

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

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


10
投票

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

//-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
});

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)
}));

0
投票

express-session 的默认 MemoryStore 会导致内存泄漏,因为它没有合适的方法让它们过期。

使用下面的包来解决问题。

npm i memorystore

将 Express-Session 存储传递到 MemoryStore 以创建 MemoryStore 构造函数。

const session = require('express-session')
const MemoryStore = require('memorystore')(session)

app.use(session({
    cookie: { maxAge: 86400000 },
    store: new MemoryStore({
      checkPeriod: 86400000 // prune expired entries every 24h
    }),
    resave: false,
    secret: 'keyboard cat'
}))

了解更多信息:https://www.npmjs.com/package/memorystore

© www.soinside.com 2019 - 2024. All rights reserved.