Ü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.