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 cookieParsere sessionmiddleware, 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.side 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 cookieParsere sessionnella 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 usercampo è personalizzato. Tutto il resto fa parte della gestione della sessione.
L'esempio è tratto da Express 2.5.