Maison  >  Article  >  interface Web  >  Jetons un coup d'œil aux cookies et aux sessions dans nodejs

Jetons un coup d'œil aux cookies et aux sessions dans nodejs

青灯夜游
青灯夜游avant
2021-03-09 10:05:121795parcourir

Cet article vous présentera les cookies et les sessions dans nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Jetons un coup d'œil aux cookies et aux sessions dans nodejs

Recommandations associées : "tutoriel nodejs"

Je suis habitué à utiliser des plug-ins dans le framework, et récemment j'étais en examinant les modules de base de node, je ne peux m'empêcher de me demander : que sont les cookies ? Qu'est-ce qu'une séance ? Quelles sont les différences et les liens entre les deux ? Node.js fournit-il les modules correspondants pour gérer les sessions de stockage ? Si aucun module correspondant n'est fourni, comment devons-nous implémenter un module similaire à la gestion de session ?

Cookie et Session

Session et Cookie sont tous deux basés sur le serveur Web et sont différents Le cookie est stocké côté client et la session est stockée côté serveur.
Lorsqu'un utilisateur navigue sur un site Web, le serveur Web stocke certaines informations sur l'utilisateur actuel sur le navigateur, et ce qui est stocké sur le client Web local sont des données de cookies. De cette façon, la prochaine fois que l'utilisateur naviguera sur le même site Web, le serveur Web vérifiera et lira d'abord les informations du cookie local. S'il existe un cookie, il déterminera son délai d'expiration en fonction du contenu du cookie, renvoyant ainsi des informations spéciales. données à l’utilisateur.

L'utilisation de cookies est très courante - de nombreux sites Web prenant en charge des services personnalisés utilisent principalement des cookies pour identifier les utilisateurs afin qu'ils puissent envoyer du contenu adapté à l'utilisateur, comme des e-mails gratuits sur l'interface Web. Autre exemple : le « 7 jours sans connexion » pris en charge par la plupart des sites Internet.
Plus précisément, le mécanisme de cookie utilise une solution qui maintient l'état côté client, tandis que le mécanisme de session utilise une solution qui maintient l'état côté serveur. Dans le même temps, nous pouvons également voir que puisque le schéma de maintien de l'état côté serveur doit également sauvegarder une identité côté client, le mécanisme de session peut avoir besoin d'utiliser le mécanisme de cookie pour atteindre l'objectif de sauvegarde de l'identité. Mais il existe en réalité d’autres options. La distribution des cookies orthodoxes est obtenue en étendant le protocole HTTP. Le serveur ajoute une ligne d'identification spéciale à l'en-tête de réponse http pour inviter le navigateur à générer le cookie correspondant conformément aux instructions. Cependant, les scripts purement côté client tels que JavaScript ou VBScript peuvent également générer des cookies - document.cookie='xxx=xxx; expires=xxx'.

Les cookies sont basés sur des sessions.

L'utilisation de cookies est automatiquement envoyée au serveur en arrière-plan par le navigateur selon certains principes. Le navigateur vérifie tous les cookies stockés. Si la portée déclarée d'un cookie est supérieure ou égale à l'emplacement de la ressource à demander, le cookie peut être attaché à l'en-tête de la requête HTTP pour demander la ressource et envoyé au serveur.
Le contenu du Cookie comprend principalement : le nom, la valeur, l'heure d'expiration, le chemin et le domaine. Le chemin et le domaine forment ensemble la portée du cookie . Si le délai d'expiration n'est pas défini, cela signifie que la durée de vie de ce cookie est pendant la session du navigateur. Lorsque la fenêtre du navigateur est fermée, le cookie disparaîtra. Ce type de cookie dont la durée de vie correspond à la session du navigateur est appelé cookie de session. Les cookies de session ne sont généralement pas stockés sur le disque dur, mais en mémoire. Bien entendu, ce comportement n'est pas standardisé. Si un délai d'expiration est défini, le navigateur enregistrera les cookies sur le disque dur. Si vous fermez et rouvrez le navigateur, ces cookies resteront valables jusqu'à ce que le délai d'expiration défini soit dépassé.

Différents navigateurs ont des méthodes de traitement différentes pour les cookies stockés en mémoire. Le mécanisme de session est un mécanisme côté serveur. Le serveur utilise une structure similaire à une table de hachage (ou peut en fait utiliser une table de hachage) pour enregistrer les informations. Lorsque le programme doit créer une session pour la demande d'un client, le serveur vérifie d'abord si la demande du client contient déjà un identifiant de session (appelé ID de session). Si c'est le cas, cela signifie qu'une session a déjà été créée pour ce client. le serveur récupère la Session en fonction de l'identifiant de Session et l'utilise (s'il ne peut pas être récupéré, il en créera une nouvelle. Si la requête du client n'inclut pas l'identifiant de Session, une Session est créée pour le client et une Session associée). avec cet identifiant de session est généré, la valeur de l'identifiant de session doit être une chaîne qui n'est ni répétée ni facile à trouver la régularité de sa génération. Cet identifiant de session sera renvoyé au client pour stockage dans cette réponse. Les cookies peuvent être utilisés pour enregistrer cet identifiant de session, afin que lors de l'interaction, le navigateur puisse envoyer automatiquement cette identification au serveur selon les règles. Généralement, le nom de ce cookie est similaire à SESSID.

Mise en place du module Session

La session étant si "importante", autant jeter un œil au module session :
Il y a un module intégré méthode in session en PHP qui peut être appelée par exemple session_start et $_SESSION etc. Cependant, le Node.js natif ne fournit aucun module de gestion de session, nous pouvons donc en implémenter un nous-mêmes :

Sur la base de l'introduction ci-dessus de la session et du cookie, il ne nous est pas difficile de comprendre la logique
Jetons un coup dœil aux cookies et aux sessions dans nodejs
(En fait, le serveur vérifie si la session a un identifiant de session correspondant dans le cookie du navigateur)

Comme le montre la figure ci-dessus, le client demandera d'abord une session, et lorsque le serveur vérifiera que le cookie du client n'a pas d'identifiant de session correspondant, il générera un nouvel identifiant de session pour cela d'une certaine manière Si l'identifiant de session existe dans le cookie et n'a pas expiré, les données de session seront renvoyées directement.
Ensuite, selon le schéma de processus et l'introduction ci-dessus, nous pouvons d'abord créer trois méthodes pour les modules que nous devons implémenter, à savoir start, newSession et cleanSessions. La méthode start démarre principalement la gestion de session, newSession crée principalement un nouvel identifiant de session pour le client et cleanSessions efface les données de session.
Ce module utilise un tableau Session pour stocker toutes les sessions dans le système. Lorsqu'un identifiant de session existe, il n'est pas nécessaire de créer un nouvel identifiant de session, mais de lire et de renvoyer directement les données de session lorsque l'identifiant de session n'existe pas ; , un identifiant de session doit être créé et l'identifiant de session est renvoyé. L'identifiant de session est stocké dans le cookie de ce client. L'auteur a lancé un simple démarrage de vérification de session, le code est le suivant :

var start = function(req,res){
	var conn = { res: res, req: req };
	var cookies = {};
	
	if(typeof conn.req.headers.cookie !== "undefined"){
		//session存在时,对session进行解析,获取其中的session id
		conn.req.headers.cookie.split(';').forEach(function(cookie){
			var parts=cookie.split('=');
			cookies[ parts[0].trim() ] = (parts[1] || '').trim();
		});
	}else{
		cookies.SESSID = 0;
	}
	
	var SESSID = cookies.SESSID;
	if(typeof sessions[SESSID] !== "undefined"){   //判断服务器中是否存在该session值
		session=sessions[SESSID];
		if(session.expires <p> Ce qui précède est un simple processus de vérification de session. L'idée principale est d'obtenir le cookie via les en-têtes de l'objet req et d'analyser le cookie. cookie pour obtenir l'identifiant de session, puis déterminer si la valeur de l'identifiant existe, renvoyant ou générant ainsi une nouvelle session. Jetons un coup d'œil à l'implémentation de la méthode principale newSession : </p><pre class="brush:php;toolbar:false">function newSession(res){
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	var SESSID = '';
	for(var i = 0; i <p>Bien sûr, la dernière étape consiste à exposer l'intégralité du module : </p><pre class="brush:php;toolbar:false">exports.start=start;

Application de la Session module

Nous pouvons exiger le module dans le fichier d'entrée (comme app.js), appeler session.start dans la fonction HTTP createServer et stocker l'objet renvoyé par session.start en tant qu'objet global . Le code est le suivant :

var app=http.createServer(function(req,res){
	global.sessionLib = session.start(res,req);
});
//调用时
if(!sessionLib['username']){
	sessionLib['username'] = 'mxc';
}

Application du plug-in de session dans node framework express

Après avoir présenté le module de base, prenons l'un des projets de l'auteur pour. expliquer l'utilisation de base des plug-ins associés dans le framework——En fait, le principe de mise en œuvre est exactement le même que celui indiqué dans cet article.

const cookieSession=require('cookie-session');
rrree

Jugez lors de l'utilisation de :

(function (){
  var keys=[];
  for(var i=0;i<p>Après vous être connecté : </p><pre class="brush:php;toolbar:false">  //检查登录状态
  router.use((req, res, next)=>{
    if(!req.session['admin_id'] && req.url!='/login'){ //没有登录且当前不是登录页(避免redirect黑洞)
      res.redirect('/admin/login');
    }else{
      next();
    }
  });

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer