Comment puis-je accéder à la session cookie du côté client?

Je construis une seule page d’application à l’aide de NodeJS et souhaite utiliser ma session de cookie (cookie-session npm) pour vérifier si l’utilisateur est connecté ou non. Du côté de mon serveur de noeud, je peux obtenir et définir le cookie de session, mais je ne sais pas comment obtenir de mon côté client.

Voici comment je me configure du côté serveur:

req.session.user_id = user[0]._id; 

user[0]._id est mon identifiant que je reçois de mon mongodb.

Supposons donc que vous avez configuré cookie-session près comme ceci:

 var cookieSession = require('cookie-session'); app.use(cookieSession({ keys: ['secret'] })); 

Puis stockons quelques données dans la session:

 req.session.user_id = 123; 

Si vous regardez dans les outils de développement de votre navigateur, vous verrez 2 cookies définis:

 express:sess = eyJ1c2VyX2lkIjoxMjN9 express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w 

Le cookie express:sess est codé en base64. Si nous le décodons, nous obtenons {"user_id":123} . Il est important de savoir que les données de la session sont stockées dans le cookie lui-même – il ne s’agit pas simplement d’un identifiant pour la session.

L’autre cookie, express:sess.sig , est la signature. Cette signature est générée à l’aide de la clé ( secret dans cet exemple) et est utilisée pour aider à empêcher toute altération. Il est facile pour quiconque de modifier express:sess mais à moins qu’ils ne puissent également générer l’ express:sess.sig correspondant express:sess.sig le serveur saura qu’il a été modifié.

Cela dit, je vous suggère de jeter un coup d’œil au middleware de express-session . Cela utilise également des cookies, mais uniquement pour stocker l’identifiant de session. Aucune donnée n’est stockée dans le cookie, c’est-à-dire tout sur le serveur. Cela ressemble beaucoup plus au fonctionnement des sessions dans la plupart des autres frameworks Web, mais je ne peux pas dire avec certitude quelle approche est la mieux adaptée à vos besoins.

Quelle que soit l’approche utilisée, le cookie est défini sur httponly par défaut. Vous pourrez le vérifier dans les outils de développement de votre navigateur. Cela signifie qu’il est inclus dans les requêtes HTTP mais qu’il n’est pas accessible via JavaScript côté client. Il s’agit d’une mesure de sécurité conçue pour rendre plus difficile le vol du cookie par un code malveillant. Vous pouvez désactiver cette fonctionnalité de sécurité dans cookie-session utilisant:

 app.use(cookieSession({ httpOnly: false, keys: ['secret'] })); 

Vous pourrez alors accéder à ces cookies en utilisant document.cookie .

Je répète qu’il s’agit d’une mesure de sécurité et qu’il est déconseillé de la désactiver. Il m’est impossible de juger s’il s’agit d’une préoccupation réelle dans votre demande.

Votre question ne dit pas clairement si vous voulez réellement parsingr les valeurs du cookie ou simplement vérifier son existence. Si vous avez besoin de l’parsingr, vous devez alors décoder en Base64 la valeur de cookie appropriée, puis JSON pour la décoder.

Vous pouvez adopter différentes httponly pour conserver les cookies en httponly . Sans en savoir plus sur ce que vous allez faire avec cette information, il est difficile d’être précis. Si vous utilisez des vues Express (c.-à-d. Un rendu de modèle), vous pouvez alors effectuer tout le travail dans le modèle. Si vous êtes sur le territoire de la SPA, vous pouvez peut-être utiliser une demande AJAX pour rassembler les informations pertinentes. À la limite, vous pouvez même utiliser un autre cookie pour vous donner les informations dont vous avez besoin tout en protégeant les cookies de session.

La session est une affaire de serveur, vous ne pouvez pas y accéder côté client. Si vous parlez de cookie, eh bien, le cookie ne contient rien à propos de la session mais un identifiant qui le pointe. Si vous souhaitez obtenir des informations de session côté client, vous devez créer une demande et le serveur renvoie les informations de session.