Comment fonctionnent les sessions dans Express.js avec noeud.js?

Par Express.js , les sessions sont très simples. Je suis curieux de savoir comment ils fonctionnent bien.

est-ce qu'il stocke des cookies sur le client? Si oui, où puis-je trouver ce biscuit? Si nécessaire, comment le décoder?

je veux essentiellement être en mesure de voir si un utilisateur est connecté, même si l'utilisateur n'est pas réellement sur le site à ce moment-là (comme comment facebook sait que vous êtes connecté lorsque vous êtes sur d'autres sites). Mais je suppose que pour comprendre que je devrais d'abord comprendre comment les sessions fonctionnent.

84
demandé sur Peter Mortensen 2011-04-02 12:09:58

3 réponses

Je n'ai jamais utilisé L'Express.js, bien que selon leur documentation sur le sujet, il ressemble à:

donc si vous voulez vérifier des choses sans objet spécifique de requête req , comme vous l'avez dit, vous devez juste accéder à ce même stockage. En bas de la première page de documentation, il détaille les méthodes que le stockage doit implémenter, donc si vous êtes familier avec votre API de stockage, peut-être pourriez-vous exécuter un .getAll() si quelque chose comme ça existe, et boucler les données de session et lire les valeurs que vous voulez.

32
répondu davin 2015-05-04 10:40:58

vue d'ensemble

Express.js utilise un cookie pour stocker un identifiant de session (avec une signature cryptée) dans le navigateur de l'utilisateur et ensuite, sur les requêtes 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 stockage de mémoire (par défaut) ou tout autre stockage qui implémente les méthodes requises (comme connect-redis ).

détails

Express.js / Connect crée une chaîne de caractères de 24 caractères Base64 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

cookies signés sont toujours utilisés pour les sessions, de sorte que la valeur de cookie aura le format suivant.

[sid].[signature]

où [sid] est le sessionID et [signature] est générée en signant [sid] en utilisant clé secrète fournie lors de l'initialisation de l'middleware de session. L'étape de signature est faite pour empêcher l'altération. Il devrait être impossible sur le plan informatique 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].

le nom de ce cookie est

connect.sid

Côté Serveur

si un handler se produit après les middlewares cookieParser et session il aura accès à la variable req.cookies . Il contient un objet JSON dont les clés sont les clés des cookies et les valeurs sont les valeurs des cookies. Cette clé contiendra une clé nommée connect.sid et sa valeur sera l'Identificateur de session signé.

voici un exemple pour configurer une route qui vérifiera l'existence du cookie de session sur chaque requête et imprimera 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 devez également vous assurer que le routeur ( app.use(app.router) ) est inclus APRÈS cookieParser et session dans votre section de configuration.

ce qui suit est un exemple des données stockées en interne par Express.js/se Connecter.

{
  "lastAccess": 1343846924959,
  "cookie": {
    "originalMaxAge": 172800000,
    "expires": "2012-08-03T18:48:45.144Z",
    "httpOnly": true,
    "path": "/"
  },
  "user": { 
    "name":"waylon",
    "status":"pro"
  }
}

le champ user est personnalisé. Tout le reste fait partie de la gestion de session.

l'exemple est tiré de L'Express 2.5.

145
répondu Waylon Flinn 2015-05-04 10:44:08

je suis curieux de savoir comment ils fonctionnent.

Essayez de regarder ce réponse et wiki choses".

est-ce qu'il stocke des cookies sur le client?

Oui, il s'agit généralement d'un cookie avec un identifiant de session assigné, qui doit être signé avec un secret afin d'éviter toute falsification.

si alors, où puis-je trouver ce biscuit? Si nécessaire, comment le décoder?

vous ne devriez pas déconner avec un cookie de session du côté du client. Si vous voulez travailler avec des sessions du côté du serveur, vous devriez consulter express.js et se connecter docs.

7
répondu yojimbo87 2017-05-23 12:18:23