web-dev-qa-db-ja.com

警告:connect.session()MemoryStoreは、メモリリークを起こし、単一プロセスを超えてスケ​​ーリングしないため、本番環境用に設計されていません。

こんにちはみんな私のコードです:

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は、メモリリークが発生し、単一のプロセスを超えて拡張されないため、本番環境用に設計されていません。

私はそれについてグーグルで試しましたが、いくつかのチュートリアルを理解していないようです。英語が下手でごめんなさい。

17
Ginxxx

これが私の問題と同じ問題に苦しんでいる人に役立つことを願っています。自分で掘り進んでください。

//-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
Ginxxx

_cookie-session_の代わりに_express-session_を使用すると、この問題は解決しました。

Cookieを使用して、サーバーではなくクライアントにセッションを保存します。

単に:

  1. _npm install cookie-session_でインストールします
  2. 変化する

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

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

1

セッションの保存がすべてです。データベースにセッションを保存する保存システムを追加する必要があります。これは、アプリがセッションを管理するのに役立ちます。

たとえば、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
Wael Ben Taleb