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.
Essayez de regarder cette réponse et les éléments du wiki .
Oui, il s'agit généralement d'un cookie avec un identifiant de session attribué, qui doit être signé avec un secret afin d'éviter toute falsification.
Vous ne devez pas jouer avec un cookie de session côté client. Si vous souhaitez travailler avec des sessions côté serveur, vous devez consulter express.js et connecter les documents.
la source
En plus des réponses déjà excellentes, voici 2 schémas que j'ai créés pour expliquer les sessions Express, leur lien avec les cookies et le stockage:
la source