Panoramica
Express.js utilizza un cookie per memorizzare un ID di sessione (con una firma di crittografia) nel browser dell'utente e quindi, nelle richieste successive, utilizza il valore di quel cookie per recuperare le informazioni di sessione memorizzate sul server. Questo archivio lato server può essere un archivio di memoria (predefinito) o qualsiasi altro archivio che implementa i metodi richiesti (come connect-redis ).
Dettagli
Express.js / Connect crea una stringa Base64 di 24 caratteri utilizzando utils.uid(24)
e la memorizza in req.sessionID
. Questa stringa viene quindi utilizzata come valore in un cookie.
Dalla parte del cliente
I cookie firmati vengono sempre utilizzati per le sessioni, quindi il valore del cookie avrà il seguente formato.
[sid].[signature]
Dove [sid] è l'ID sessione e [firma] viene generata firmando [sid] utilizzando la chiave segreta fornita durante l'inizializzazione del middleware della sessione. La fase di firma viene eseguita per evitare manomissioni. Dovrebbe essere computazionalmente impossibile modificare [sid] e quindi ricreare [firma] senza conoscere la chiave segreta utilizzata. Il cookie di sessione è ancora vulnerabile al furto e al riutilizzo, se non è richiesta alcuna modifica di [sid].
Il nome di questo cookie è
connect.sid
Lato server
Se un gestore si verifica dopo il cookieParser
e session
middleware, avrà accesso alla variabile req.cookies
. Contiene un oggetto JSON le cui chiavi sono le chiavi dei cookie ei valori sono i valori dei cookie. Questo conterrà una chiave denominata connect.sid
e il suo valore sarà l'identificatore di sessione firmato.
Ecco un esempio di come impostare un percorso che verificherà l'esistenza del cookie di sessione ad ogni richiesta e ne stamperà il valore sulla console.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Dovrai anche assicurarti che il router ( app.use(app.router)
) sia incluso dopo cookieParser
e session
nella sezione di configurazione.
Di seguito è riportato un esempio dei dati archiviati internamente da Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
Il user
campo è personalizzato. Tutto il resto fa parte della gestione della sessione.
L'esempio è tratto da Express 2.5.