99 votes

Comment faire des sessions de travail en Express avec NodeJs?

À l'aide de l'Express, les sessions sont morts simple. Je suis curieux de savoir comment ils fonctionnent bien.

Est-il stocker des cookies sur le client? Si oui, où puis-je trouver ce cookie? Si nécessaire, comment le décoder?

En gros, je veux être en mesure de voir si un utilisateur est connecté, même lorsque l'utilisateur n'est pas vraiment sur le site à l'époque (Comme la façon dont 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 séances de travail.

173voto

Waylon Flinn Points 8140

Vue d'ensemble

Express utilise un cookie pour stocker un id de session (avec un chiffrement signature) dans le navigateur de l'utilisateur et ensuite, sur les demandes ultérieures, utilise la valeur du cookie à récupérer les informations de session sont stockés sur le serveur. Ce côté serveur de stockage peut être une mémoire de store (par défaut) ou tout autre magasin qui implémente les méthodes requises (comme connectez-redis).

Détails

Express/Connect crée un 24 caractères base64 chaîne à l'aide de utils.uid(24) et magasins en req.sessionID. Cette chaîne est ensuite utilisée comme valeur dans un cookie.

Côté Client

Signé cookies sont toujours utilisés pour des séances de sorte que la valeur du cookie sont les suivantes format.

[sid].[signature]

Où [sid] est l'id de session et [signature] est généré par la signature [sid] à l'aide de la clé secrète fournie lors de l'initialisation de la session de middleware. La signature de l'étape est fait pour empêcher la falsification. Il convient de calcul infeasable à modifier [sid], puis de les recréer [signature] sans la connaissance de 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 témoin est

connect.sid

Côté Serveur

Si un gestionnaire se produit après l' cookieParser et session middleware il avoir 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. Il contient un clé nommée connect.sid et sa valeur sera la signature de l'identifiant de session.

Voici un exemple de comment mettre en place un itinéraire qui permettra de vérifier l'existence de la cookie de session sur chaque demande et imprimer la valeur de 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 aurez également besoin de vous assurer que le routeur (app.use(app.router))est incluse après cookieParser et session dans votre section configurer.

Ce qui suit est un exemple de données stockés en interne par l'Express/se Connecter.

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

L' user champ personnalisé. Tout le reste est une partie de la gestion de session.

Exemple de Express 2.5

45voto

davin Points 19682

Jamais utilisé Express, bien que, selon ses docs sur le sujet, ça sonne comme:

  • Les Cookies sont stockés sur le client, avec une touche (par lequel le serveur va utiliser pour récupérer les données de la session) et d'une table de hachage (lequel le serveur va utiliser pour s'assurer que les données du cookie n'a pas été altéré, donc si vous essayez de modifier une valeur, le cookie ne sera pas valide)

  • Les données de la session, contrairement à certains cadres (p. ex. un Jeu!) est tenue sur le serveur, de sorte que le cookie est plus comme un espace réservé pour la session que le titulaire de la session de données.

  • À partir d' ici, ça ressemble à cette session de données sur le serveur par défaut est conservé dans la mémoire, bien que pouvant être modifiées à tout forme de stockage implémente l'API appropriée.

Donc, si vous voulez vérifier les choses sans req objet de demande, comme vous l'avez dit, vous devez simplement accéder à la même stockage. Sur le bas de la première docs page, elle détaille les méthodes requises aux besoins de stockage à mettre en œuvre, donc si vous êtes familier avec votre API de stockage, peut-être que vous pourriez exécuter un .getAll() si quelque chose comme ce qui existe, et la boucle à travers les données de session et de lire ce que les valeurs que vous voulez.

9voto

yojimbo87 Points 27744

Je suis curieux de savoir comment ils fonctionnent bien.

Essayez de regarder cette réponse et wiki choses.

Est-il stocker des cookies sur le client?

Oui, il est généralement un cookie avec attribution d'ID de session, qui doit être signé avec un secret afin d'empêcher la falsification.

Si oui, où puis-je trouver ce cookie? Si nécessaire, comment le décoder?

Vous ne devriez pas jouer avec un cookie de session sur le côté client. Si vous souhaitez travailler avec des sessions sur le serveur, vous devriez vérifier liées express.js et connecter docs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X