2013-06-04 7 views
5

ich Express verwenden, um meine Session-Management zu unterstützen:Wie kann ich SessionId von einer Anfrage bekommen?

app.use(express.cookieParser('your secret here')); 
app.use(express.session({secret: 'mysecretcode'})); 

mir, was die sessionId aus der Anforderung zu extrahieren und zu speichern. Allerdings ist die ID ich von req.sessionID erhalten anders als in den Cookie gesendet:

req.sessionID --> 'E7oSoKmQfcMKnk5_jA5tF5vR' 
cookie.connect.sid --> 's%3AE7oSoKmQfcMKnk5_jA5tF5vR.DQnYdDDcFn8K2JJHMgWL5DTzNYYwIU3DA5a10WImA7U'; 
  1. Warum diese beiden sind anders?
  2. Wie kann ich connect.sid bekommen, bevor ich eine Antwort sende?
+0

Verwenden Sie req.sessionID, die von Express im Middleware-Aufruf eingerichtet wird, den Sie in Ihrem Code haben (von dem ich annehme, dass er über Ihrer Routeneinstellung liegt, falls vorhanden). Beachten Sie, dass der integrierte MemoryStore, den Express für Sitzungen bereitstellt, nicht für die Verwendung in der Produktion (kein GC usw.) empfohlen wird, wenn Sie planen, Sitzungsdaten außerhalb der Sitzungs-ID zu erstellen und zu speichern. – ravi

Antwort

4

las ich den Sourcecode von connect.session und bekam:

key = options.key || 'connect.sid' 

und

var val = 's:' + signature.sign(req.sessionID, secret); 
val = cookie.serialize(key, val); 
debug('set-cookie %s', val); 
res.setHeader('Set-Cookie', val); 

so, verbinden Cookie in Antwort-Header gesetzt, wenn 'Header' Ereignis Antwort gefeuert, Wenn Sie response.end() aufrufen, speichert connect die Sitzungsdaten im Speicher.

Das ist es.

Verwandte Themen