Überblick
Express.js verwendet ein Cookie, um eine Sitzungs-ID (mit einer Verschlüsselungssignatur) im Browser des Benutzers zu speichern, und verwendet dann bei nachfolgenden Anforderungen den Wert dieses Cookies, um auf dem Server gespeicherte Sitzungsinformationen abzurufen. Dieser serverseitige Speicher kann ein Speicher (Standard) oder ein anderer Speicher sein, der die erforderlichen Methoden implementiert (z. B. connect-redis ).
Einzelheiten
Express.js / Connect erstellt eine 24- stellige Base64- Zeichenfolge utils.uid(24)
und speichert sie in req.sessionID
. Diese Zeichenfolge wird dann als Wert in einem Cookie verwendet.
Client-Seite
Signierte Cookies werden immer für Sitzungen verwendet, sodass der Cookie-Wert das folgende Format hat.
[sid].[signature]
Wobei [sid] die Sitzungs-ID ist und [Signatur] durch Signieren von [sid] mit dem geheimen Schlüssel generiert wird, der beim Initialisieren der Sitzungs-Middleware angegeben wurde. Der Signaturschritt wird ausgeführt, um Manipulationen zu verhindern. Es sollte rechnerisch nicht möglich sein, [sid] zu ändern und dann [Signatur] ohne Kenntnis des verwendeten geheimen Schlüssels neu zu erstellen. Das Sitzungscookie ist weiterhin anfällig für Diebstahl und Wiederverwendung, wenn keine Änderung von [sid] erforderlich ist.
Der Name für dieses Cookie lautet
connect.sid
Serverseite
Wenn ein Handler nach der Middleware cookieParser
und auftritt, session
hat er Zugriff auf die Variable req.cookies
. Dieses enthält ein JSON-Objekt, dessen Schlüssel die Cookie-Schlüssel und deren Werte die Cookie-Werte sind. Dieser enthält einen benannten Schlüssel connect.sid
und sein Wert ist die signierte Sitzungskennung.
Hier ist ein Beispiel für das Einrichten einer Route, die bei jeder Anforderung das Vorhandensein des Sitzungscookies überprüft und dessen Wert auf der Konsole druckt.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Sie müssen auch sicherstellen, dass der Router ( app.use(app.router)
) nach cookieParser
und session
in Ihrem Konfigurationsabschnitt enthalten ist.
Das Folgende ist ein Beispiel für die Daten, die intern von Express.js / Connect gespeichert werden.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
Das user
Feld ist benutzerdefiniert. Alles andere ist Teil des Sitzungsmanagements.
Das Beispiel stammt aus Express 2.5.
Versuchen Sie, sich diese Antwort und das Wiki- Zeug anzusehen .
Ja, es ist normalerweise ein Cookie mit zugewiesener Sitzungs-ID, das mit einem Geheimnis signiert werden sollte, um Fälschungen zu verhindern.
Sie sollten sich nicht mit einem Sitzungscookie auf der Clientseite anlegen. Wenn Sie mit Sitzungen auf der Serverseite arbeiten möchten, sollten Sie die zugehörigen express.js auschecken und Dokumente verbinden .
quelle
Zusätzlich zu den bereits hervorragenden Antworten habe ich zwei Diagramme erstellt, um Express-Sitzungen, deren Verknüpfung mit Cookies und Speicher zu erläutern:
quelle