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

时间:2017-07-03 09:51:21

标签: 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:{
    secure: true
       }
}));

此代码始终返回到我的日志a:

  

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

我尝试使用谷歌搜索但我似乎不理解一些教程。 抱歉我的英语不好。

4 个答案:

答案 0 :(得分: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
});

答案 1 :(得分:4)

使用cookie-session代替express-session为我解决了这个问题。

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

简单地:

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

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

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

答案 2 :(得分:0)

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

例如,在mongodb中你可以使用connect-mongo,你应该找到一个商店包和其他数据库。

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

 twoWeeksFromNow := time.Now().AddDate(0, 0, 14)
 oneMonthFromNow := time.Now().AddDate(0, 1, 0)
 oneYearFromNow := time.Now().AddDate(1, 0, 0)

答案 3 :(得分:0)

我相信我可以帮助你,我遇到了同样的错误,不得不自己调试。 你有几个选择。

第一个:您使用 express-session 创建了一个用户会话,但忘记将会话密钥添加到 heroku config vars 中的 vars 例如:

app.use(
session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: true,

使用 process.env.SESSION_SECRET 而没有将秘密添加到 heroku vars 会给你这个错误(这就是我的情况)

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

比如在mongodb中你可以使用connect-mongo,你应该找到一个store包和其他数据库。

例如:

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

app.use(session({
    secret: 'foo',
    store: new MongoStore(options)
}));

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

第三:如果一切都失败了,我不推荐最后一个选项,是在客户端而不是服务器端存储 cookie。 为此,您必须替换 express-session(如果您重新使用它)与 cookie 会话。

例如:

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

然后照常编写 app.use

希望能帮到你,抱歉回复晚了