Aperçu
Express.js utilise un cookie pour stocker un identifiant de session (avec une signature de cryptage) dans le navigateur de l'utilisateur, puis, lors de demandes ultérieures, utilise la valeur de ce cookie pour récupérer les informations de session stockées sur le serveur. Ce stockage côté serveur peut être un magasin de mémoire (par défaut) ou tout autre magasin qui implémente les méthodes requises (comme connect-redis ).
Détails
Express.js / Connect crée une chaîne Base64 de 24 caractères en utilisant utils.uid(24)
et la stocke dans req.sessionID
. Cette chaîne est ensuite utilisée comme valeur dans un cookie.
Côté client
Les cookies signés sont toujours utilisés pour les sessions, la valeur du cookie aura donc le format suivant.
[sid].[signature]
Où [sid] est l'identifiant de session et [signature] est généré en signant [sid] à l'aide de la clé secrète fournie lors de l'initialisation du middleware de session. L'étape de signature est effectuée pour empêcher la falsification. Il devrait être impossible de modifier [sid] puis de recréer [signature] sans connaître la clé secrète utilisée. Le cookie de session est toujours vulnérable au vol et à la réutilisation, si aucune modification de [sid] n'est requise.
Le nom de ce cookie est
connect.sid
Du côté serveur
Si un gestionnaire survient après le middleware cookieParser
et, session
il aura accès à la variable req.cookies
. Il contient un objet JSON dont les clés sont les clés de cookie et les valeurs sont les valeurs de cookie. Celui-ci contiendra une clé nommée connect.sid
et sa valeur sera l'identifiant de session signé.
Voici un exemple de la façon de configurer une route qui vérifiera l'existence du cookie de session à chaque demande et affichera sa valeur sur la 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
});
Vous devrez également vous assurer que le routeur ( app.use(app.router)
) est inclus après cookieParser
et session
dans votre section de configuration.
Voici un exemple des données stockées en interne par Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
Le user
champ est personnalisé. Tout le reste fait partie de la gestion de session.
L'exemple provient d'Express 2.5.