2013-06-04 20 views
5

używam express wspierać moje zarządzanie sesją:Jak mogę uzyskać sessionId z żądania?

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

I co wyodrębnić i zapisać sessionid z żądania. Jednak id dostaję od req.sessionID różni się, że wysłał w pliku cookie:

req.sessionID --> 'E7oSoKmQfcMKnk5_jA5tF5vR' 
cookie.connect.sid --> 's%3AE7oSoKmQfcMKnk5_jA5tF5vR.DQnYdDDcFn8K2JJHMgWL5DTzNYYwIU3DA5a10WImA7U'; 
  1. Dlaczego te dwa są różne?
  2. Jak mogę uzyskać connect.sid przed wysłaniem odpowiedzi?
+0

Użyj komendy req.sessionID, która jest konfigurowana przez Express w wywołaniu oprogramowania pośredniego, które masz w kodzie (co, jak zakładam, jest nad konfiguracją trasy, jeśli jest). Zauważ, że wbudowany magazyn MemoryStore, który Express zapewnia sesje, nie jest zalecany do użytku "produkcyjnego" (bez GC itp.), Jeśli masz jakiekolwiek plany dotyczące utworzenia i przechowywania danych sesji poza identyfikatorem sesji. – ravi

Odpowiedz

4

czytam źródłowego z connect.session i otrzymała:

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

i

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

celu połącz ustawi plik cookie w nagłówku odpowiedzi kiedy zdarzenie 'header' Response zwolniony, a gdy wywołasz response.end(), connect zapisze dane sesji w magazynie.

To wszystko.

Powiązane problemy