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 cookieParseri 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.sida 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 cookieParseriw sessionsekcji 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"
}
}
userPole jest zwyczaj. Wszystko inne jest częścią zarządzania sesjami.
Przykład pochodzi z Express 2.5.