Wann saveUninitialized und speichern in der express-Sitzung
Ich bin Neuling mit dem MEAN stack. Ich lese die express-Sitzung github doc aber es gibt einige Optionen, die mir unklar. Diese Optionen sind saveUninitialized
und resave
.
Kann bitte jemand erklären, mit Beispiele was sind die advatanges mit saveUninitialized
und resave
, und was wird die Wirkung sein, wenn wir die booleschen Werte in die Optionen.
Syntax:-
app.use(session({
resave: false,
saveUninitialized: true,
}))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns davon ausgehen, dass die Sitzungen aktiviert sind Global (für alle Anfragen).
Wenn ein client eine HTTP-Anforderung und die Anforderung nicht enthalten eine " session-cookie, wird eine neue Sitzung erstellt werden, indem
express-session
. Anlegen einer neuen session ein paar Dinge:req.session
saveUninitialized
am Ende der Anfrage, die die session-Objekt gespeichert werden, in der session speichern (das ist in der Regel eine Art Datenbank)Wenn während der Laufzeit der Anforderung des session-Objekts nicht geändert dann, am Ende der Anfrage und wenn
saveUninitialized
ist false, die (noch leer, weil unveränderte) session-Objekt nicht in der session gespeichert speichern.Die Argumentation hinter diesem ist, dass dies verhindert, dass eine Menge von leeren session-Objekte gespeichert, die in der session speichern. Da gibt es nichts sinnvolles zu speichern, wird die Sitzung "vergessen" am Ende der Anfrage.
Wenn Sie möchten, dies zu ermöglichen? Wenn Sie möchten, um in der Lage zu erkennen wiederkehrende Besucher, zum Beispiel. Sie würde in der Lage sein, zu erkennen, wie ein Besucher, weil Sie das senden der session-cookie mit einer eindeutigen id.
Über
resave
: diese kann aktiviert werden, für die session speichert, die keine Unterstützung für die "touch" - Befehl. Was dies bedeutet ist sagen, die Sitzung zu speichern, die einer bestimmten Sitzung noch aktiv ist, die notwendig ist, weil einige Geschäfte löschen idle (ungenutzt) Sitzungen nach einiger Zeit.Wenn Sie eine Sitzung speichern-Treiber nicht implementieren Sie den Befehl touch, dann sollten Sie aktivieren
resave
so, dass selbst wenn eine Sitzung nicht verändert wurde während eines request, es ist immer noch aktualisiert, in den store (und damit die Markierung aktiv).Also es hängt ganz von der session zu speichern, das Sie verwenden, wenn Sie brauchen, um diese option zu aktivieren oder nicht.
touch
Befehl ist hier dokumentiert: github.com/expressjs/session#sessiontouchEine Sache zu beachten ist, dass wenn Sie
saveUninitialized
zu false, das session cookie nicht gesetzt werden, über den browser, es sei denn, die Sitzung ist geändert. Dieses Verhalten herangezogen werden können, aber es war mir nicht klar, wenn ich war in der ersten Lesung durch die Dokumentation.req.session.liked = id
und jetzt bin ich nicht immer neue session-ids. Hoffentlich wird dadurch mein problem behoben.