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

Javascript 警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程,javascript,node.js,session,cookies,memory-leaks,Javascript,Node.js,Session,Cookies,Memory Leaks,大家好这里是我的代码: 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:{

大家好这里是我的代码:

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
       }
}));
此代码始终在我的日志a中返回:

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

我试着在谷歌上搜索,但我似乎不懂一些教程。
对不起,我的英语不好。

我希望这能帮助那些和我一样在苦苦挣扎的人。 我自己挖的

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

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

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


使用
cookie会话
而不是
express会话
为我解决了这个问题

您将会话存储在客户端,而不是带有cookie的服务器上

简单地说:

  • 使用npm安装cookie会话安装它
  • 改变
    var session=require('express-session')

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


  • 我相信我能帮助你,我也犯了同样的错误,不得不自己调试。 你有几个选择

    1st:您使用express session创建了一个用户会话,但忘记在heroku config vars中将会话机密添加到vars中 例:

    使用process.env.SESSION\u SECRET而不将该秘密添加到heroku vars将导致此错误(我就是这样做的)

    2nd:(与上面的答案相同)您没有指定会话的存储位置。您应该添加一个存储系统,将会话存储到数据库中。这有助于您的应用程序管理会话

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

    例:

    通过这样做,您将会话存储在mongo中

    3:如果所有操作都失败,我不建议您将cookis存储在客户端而不是服务器端。要执行此操作,您必须将express会话(如果正在使用)替换为cookie会话

    例:

    然后编写应用程序。正常使用


    希望这对您有所帮助,很抱歉回复太晚,如果您做一点解释,将更有帮助!!。。。既然您使用redistore(),那么Mongodb呢?问题是将会话数据存储在内存中并不安全。它没有以任何方式进行加密或保护。此外,每次服务器重新启动时,所有会话数据都将消失,用户将不得不再次登录。此外,您无法在将来扩展应用程序,因为会话数据存储在本地内存中,并且应用程序的其他实例无法远程或在同一主机上运行,因为使用外部会话存储的单独进程有助于解决这些问题。Redis是一个可以做到这一点的数据库。MongoDB也可以。如果我不使用Mongo呢?你有一些选择,为什么不推荐第三个呢?(这似乎是最简单的)
    const session = require('express-session');
    const MongoStore = require('connect-mongo')(session);
    
    app.use(session({
        secret: 'foo',
        store: new MongoStore(options)
    }));
    
    app.use(
    session({
      secret: process.env.SESSION_SECRET,
      resave: false,
      saveUninitialized: true,
    
    const session = require('express-session');
    const MongoStore = require('connect-mongo')(session);
    
    app.use(session({
        secret: 'foo',
        store: new MongoStore(options)
    }));
    
    npm i cookie-session
    var session = require('cookie-session');