Przegląd
Express.js wykorzystuje plik cookie do przechowywania identyfikatora sesji (z podpisem szyfrowania) w przeglądarce użytkownika, a następnie, przy kolejnych żądaniach, wykorzystuje wartość tego pliku cookie do pobierania informacji o sesji przechowywanych na serwerze. Ten magazyn po stronie serwera może być magazynem pamięci (domyślnie) lub dowolnym innym magazynem, który implementuje wymagane metody (np. Connect-redis ).
Detale
Express.js / Connect tworzy 24-znakowy ciąg Base64 przy użyciu utils.uid(24)
i przechowuje go w req.sessionID
. Ten ciąg jest następnie używany jako wartość w pliku cookie.
Strona klienta
Podpisane pliki cookie są zawsze używane do sesji, więc wartość pliku cookie będzie miała następujący format.
[sid].[signature]
Gdzie [sid] jest identyfikatorem sesji, a [podpis] jest generowany przez podpisywanie [identyfikator] przy użyciu tajnego klucza dostarczonego podczas inicjowania oprogramowania pośredniczącego sesji. Podpisywanie ma na celu zapobieżenie manipulowaniu. Modyfikacja [sid], a następnie odtworzenie [podpisu] bez znajomości użytego tajnego klucza powinno być niewykonalne obliczeniowo. Plik cookie sesji jest nadal podatny na kradzież i ponowne wykorzystanie, jeśli nie jest wymagana modyfikacja [sid].
Nazwa tego pliku cookie to
connect.sid
Po stronie serwera
Jeśli program obsługi wystąpi po oprogramowaniu pośrednim cookieParser
i session
, będzie miał dostęp do zmiennej req.cookies
. Zawiera obiekt JSON, którego klucze są kluczami plików cookie, a wartości są wartościami plików cookie. Będzie zawierał klucz o nazwie, connect.sid
a jego wartością będzie podpisany identyfikator sesji.
Oto przykład, jak skonfigurować trasę, która sprawdzi istnienie pliku cookie sesji przy każdym żądaniu i wydrukuje jego wartość na konsoli.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Musisz także upewnić się, że router ( app.use(app.router)
) jest dołączony po cookieParser
iw session
sekcji konfiguracji.
Poniżej znajduje się przykład danych przechowywanych wewnętrznie przez Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
user
Pole jest zwyczaj. Wszystko inne jest częścią zarządzania sesjami.
Przykład pochodzi z Express 2.5.
Spróbuj spojrzeć na tę odpowiedź i na wiki .
Tak, zwykle jest to plik cookie z przypisanym identyfikatorem sesji, który powinien być podpisany sekretem, aby zapobiec fałszerstwu.
Nie powinieneś zadzierać z plikiem cookie sesji po stronie klienta. Jeśli chcesz pracować z sesjami po stronie serwera, powinieneś sprawdzić powiązane pliki express.js i connect docs.
źródło
Oprócz już doskonałych odpowiedzi, oto 2 diagramy, które stworzyłem, aby wyjaśnić sesje Express, ich powiązanie z plikami cookie i sklepem:
źródło