wake-up-neo.com

Was ist der Unterschied zwischen Express-Sitzung und Cookie-Sitzung?

Ich bin neu mit Express. Da Express 4.x gebündelte Middlewares entfernt hat . Jede Middleware, die ich verwenden möchte, sollte erforderlich sein. Wenn ich die README mit express-session und cookie-session auf github lese, fällt es mir schwer, den Unterschied zu verstehen.

Also versuche ich, einfachen Code zu schreiben, um es herauszufinden. Ich renne zweimal für jede Middleware.

var express = require('express')
  , cookieParser = require('cookie-parser')
  , session = require('cookie-session')
  , express_sess = require('express-session')
  , app = express();

app.use(cookieParser())
app.use(session({ keys: ['abc'], name: 'user' }));
//app.use(express_sess({ secret: 'abc', key: 'user'}));
app.get('/', function (req, res, next) {
    res.end(JSON.stringify(req.cookies));
    console.log(req.session)
    console.log(req.cookies)
});

app.listen(3000);

Für cookie-session bekomme ich immer {} in mein Terminal.

Für express-session bekomme ich solche Sachen.

req.session: { cookie: { 
     path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true 
   } 
}

req.cookie: {user: 's:aJ97vKA5CCwxqdTj0AV1siRQ.fWusS5+qfCKICtwkfrzcZ/Gq8P0Qdx/kx8mTBhoOhGU'}

Es verwirrt mich wirklich. Wie erklärt man das Ergebnis mit der Grundanwendung? Und was ist der Unterschied zwischen ihnen? Wann sollte ich sie benutzen? 

32
Tinple

Grundsätzlich ist express-session abstrakter und unterstützt verschiedene Sitzungsspeicher (wie Dateien, DB, Cache und so weiter).

Und cookie-session ist ein einfaches/leichtes Cookie-basiertes Verfahren (Cookie ist die einzige unterstützte Speicher-Engine: Alle Sitzungsinformationen werden auf dem Client in einer Cookie-Sitzungsimplementierung gespeichert). Diese Art von Sitzungen ist wahrscheinlich am berühmtesten für die Implementierung von Rails .

31
bredikhin

Der grundlegende Unterschied zwischen diesen beiden bezieht sich darauf, wie und wo die Sitzungsdaten gespeichert werden. Cookie-Sitzung wird grundsätzlich für einfache Sitzungsanwendungen verwendet, bei denen die Sitzungsdaten in einem Cookie gespeichert werden, jedoch im client [Browser], wohingegen bei Express Session nur eine Sitzung gespeichert wird Kennung innerhalb eines Cookies auf der Client-Seite, während die Sitzungsdaten vollständig auf dem Server gespeichert werden. Cookie-Sitzung ist hilfreich bei Anwendungen, bei denen im Backend keine Datenbank verwendet wird. Die Sitzungsdaten dürfen jedoch die Cookie-Größe nicht überschreiten. Wenn eine Datenbank verwendet wird, wirkt sie wie ein Cache, um häufige Datenbankabfragen zu stoppen, was teuer ist.

7
Doomed93

Lassen Sie mich einen wichtigen Unterschied teilen, den ich gefunden habe: sichere Cookies.

Ich habe einen Knotenprozess hinter einem Nginx-Proxy, der SSL handhabt.

Ich habe es mit express-session versucht, konnte aber keine sicheren Cookies aktivieren, siehe issue here .

Dann habe ich mit fast demselben Code versucht, aber stattdessen mit cookie-session so etwas

   const expressSession = require('cookie-session')

   var expiryDate = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days

    const session = expressSession({
      secret: sessionSecret,
      resave: false,
      saveUninitialized: true,
      cookie: {
        secureProxy: true,
        httpOnly: true,
        domain: 'example.com',
        expires: expiryDate
      }
    })

    app.use(session)

Ich habe gerade require('express-session') in require('cookie-session') geändert und secureProxy: true, hinzugefügt: alles hat aus der Box heraus funktioniert.

Beachten Sie auch, dass beide Pakete von expressjs verwaltet werden. In meinem Anwendungsfall hatte ich wahrscheinlich das Glück, herauszufinden, dass die Cookie-Sitzung meinen Bedürfnissen entspricht.

4
Gianluca Casati

express-session speichert den Sitzungsbezeichner im Cookie, während sich die tatsächlichen Sitzungsdaten im Backend-Sitzungsspeicher befinden, wie connect-redis. Mit cookie-session können Sie die Sitzungsdaten in einem Cookie speichern (clientseitig). 

Aus der Dokumentation von cookie-session

Eine Benutzersitzung kann auf zwei Arten mit Cookies gespeichert werden: auf der Server oder auf dem Client. Dieses Modul speichert die Sitzungsdaten in der Client innerhalb eines Cookies, während ein Modul wie Express-Session .__ speichert. Nur eine Sitzungskennung auf dem Client in einem Cookie und speichert die Sitzungsdaten auf dem Server, normalerweise in einer Datenbank.

Der Hauptvorteil der Verwendung von cookie-session ist, wenn Sie eine gruppierte node.js-App haben. Dann müssen Sie sich nicht auf die gemeinsame Nutzung von Sitzungsdaten zwischen verzweigten Prozessen verlassen.

3
Abhijeet

v4-> cookie-session ist (Cookie-basierte Sessions einrichten.) gleich -> v3 express.cookieSession

v4-> Express-Sitzung ist (Serverbasierte Sitzungen einrichten (nur Entwicklung)). entspricht in -> v3 express.session

0
猪八戒

Sie erhalten eine nicht leere console.log (req.session), die Sie vor der Protokollierung festlegen müssen.

Aus dem Cookie-Session-Repo ( https://github.com/expressjs/cookie-session ):

app.get('/', function (req, res, next) {
 req.session.views = (req.session.views || 0) + 1
 console.log(req.session)
 res.end(req.session.views + ' views')
})

Wenn Sie keine Informationen für das req.session-Objekt festlegen, wird es leer zurückgegeben.

0
LeoGonzalez