Dobrych facetów tutaj jest mój kod:

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

Ten kod zawsze powraca na mój dziennik A:

OSTRZEŻENIE: Connect.Session () MemRemestore nie jest przeznaczony do środowiska produkcyjnego, ponieważ będzie przeciekła pamięć i nie będzie przekształcić obok jednego procesu.

Próbowałem o tym Googling, ale nie wydaje mi się, że nie rozumiem tutoriale. Przepraszam za mój zły angielski.

31
Ginxxx 3 lipiec 2017, 12:51

4 odpowiedzi

Najlepsza odpowiedź

Mam nadzieję, że pomoże to komuś, kto walczy o tym samym problemie, co mój. Po prostu go wykopałem.

//-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
});
6
Ginxxx 3 lipiec 2017, 11:48

Używanie cookie-session zamiast express-session rozwiązał ten problem dla mnie.

Przechowujesz sesję na kliencie, a nie na serwerze z plikami cookie.

Po prostu:

  1. Zainstaluj go za pomocą npm install cookie-session
  2. Zmiana

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

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

4
Geo Angelopoulos 25 styczeń 2020, 16:07

Chodzi o przechowywanie sesji, należy dodać system przechowywania, który przechowuje sesje w bazie danych. Pomóż tej aplikacji do zarządzania sesjami.

Na przykład w MongoDB możesz użyć Connect-Mongo, należy znaleźć pakiet sklepu i innych baz danych.

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)
}));
2
smonff 17 grudzień 2018, 09:19

Wierzę, że mogę ci pomóc, dostałem ten sam błąd i musiałem się debugować. Masz tutaj kilka opcji.

1st: Stworzyłeś sesję użytkownika za pomocą ekspresowej sesji, ale zapomniałeś dodać sekret sesji do Vars w Heroku Config Vars Dawny:

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

Korzystanie z procesu.Env.Session_Secret i nie dodawanie tajemnicy do Heroku Vars da ci ten błąd (to był mój przypadek)

2ND: (tak samo jak powyżej) Nie określono, gdzie przechowywać sesję. Powinieneś dodać system przechowywania, który przechowuje sesje w bazie danych. Pomaga to Twojemu aplikacji zarządzać sesjami.

Na przykład w MongoDB możesz użyć Connect-Mongo, należy znaleźć pakiet sklepu i innych baz danych.

Dawny:

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

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

Dzięki temu przechowujesz sesję w Mongo.

3rd: Ostatnia opcja Jeśli wszystkie nie powiedzie się, nie polecam, to przechowuje stronę klient cookis zamiast serwera. Aby to zrobić, musisz zastąpić ekspresową sesję (jeśli go używasz ) z sesją cookie.

Dawny:

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

Następnie piszę app.use jako normalnie

Mam nadzieję, że to ci pomoże, przepraszam za późną odpowiedź

0
John Galt 5 luty 2021, 22:54