Table des matières
Avant-propos
Qu'est-ce qu'une session
session dans le nœud
La session est stockée dans Redis
la session est stockée dans mongoDb
Maison interface Web js tutoriel Qu'est-ce qu'une session dans un nœud ? Comment utiliser ?

Qu'est-ce qu'une session dans un nœud ? Comment utiliser ?

Sep 14, 2018 pm 02:03 PM
javascript mongodb node.js redis session

Le contenu de cet article porte sur qu'est-ce qu'une session dans un nœud ? Comment utiliser ? 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 vous sera utile.

Avant-propos

Dans l'article précédent, les cookies dans le nœud ont été introduits. Cet article continuera à expliquer la session.

Qu'est-ce qu'une session

La session n'est qu'une session, alors qu'est-ce qu'une session ?
La session est un concept avec une granularité plus grande que la connexion. Un 会话 peut contenir plusieurs 连接, et chaque connexion est considérée comme une opération de la session.
Lorsque l'utilisateur passe d'une page Web à l'autre, les variables stockées dans l'objet Session ne seront pas perdues, mais persisteront tout au long de la session utilisateur.
Lorsqu'un utilisateur demande une page Web à votre application, le serveur Web créera automatiquement un objet Session si l'utilisateur n'a pas déjà de session. Lorsqu'une session expire ou est abandonnée, le serveur met fin à la session.

Cela dit, jetons d’abord un coup d’œil à ce produit.

Quest-ce quune session dans un nœud ? Comment utiliser ?

Il s'avère que la session générée par le middleware de session est un objet qui contient des informations sur les cookies.

session dans le nœud

Tout d'abord, installez le framework express, le middleware cookieParser, le middleware de session express

npm i express --save
npm i cookie-parser --save
npm i express-session --save
Copier après la connexion

Par défaut, le middleware de session Express est Les informations de session sont stockées en mémoire et nécessite 签名cookie, vous devez donc lui transmettre un 秘钥 lorsque vous utilisez cookieParser(). S'il n'y a pas de clé secrète, il affichera Error: secret option required for sessions

Le code est le suivant :

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

var app = express()
app.use(cookieParser())

const hour = 1000 * 60 * 60;
var sessionOpts = {
  // 设置密钥
  secret: 'a cool secret',
  // Forces the session to be saved back to the session store
  resave: true,
  // Forces a session that is "uninitialized" to be saved to the store.
  saveUninitialized: true,
  // 设置会话cookie名, 默认是connect.sid
  key: 'myapp_sid',
  // If secure is set to true, and you access your site over HTTP, the cookie will not be set.
  cookie: { maxAge: hour * 2, secure: false }
}
app.use(session(sessionOpts))

app.use(function(req, res, next) {
  if (req.url === '/favicon.ico') {
    return
  }

  // 同一个浏览器而言,req是同一个
  var sess = req.session;
  console.log(sess)

  if (sess.views) {
    sess.views++;
  } else {
    sess.views = 1;
  }
  res.setHeader('Content-Type', 'text/html');
  res.write('<p>views: ' + sess.views + '</p>');
  res.end();
});

app.listen(4000);
Copier après la connexion

Le code ci-dessus implémente une simple fonction 页面浏览计数.
Exécutez le code ci-dessus, vous pouvez ouvrir le navigateur, actualiser la page en continu et observer la valeur de session imprimée dans le programme de nœud.
Nous avons constaté que lorsque nous actualisions la page dans le même navigateur, la même session était imprimée sur la console, mais la valeur des vues changeait. En d'autres termes, plusieurs connexions http correspondent à la même session.

La session est stockée dans Redis

Par défaut, le middleware de session Express stocke les informations de session en mémoire, mais pendant le développement et la production, il est préférable d'avoir un fichier persistant et évolutif. Les données stockent vos données de session . La communauté express a créé plusieurs magasins de sessions qui utilisent des bases de données, notamment MongoDB, Redis, Memcached, PostgreSQL et autres. Mais la faible latence 键/值存储 est la plus adaptée à ce type de données volatiles. Ici, nous utilisons d'abord redis pour stocker les informations de session.

Tout d'abord, installez le module connect-redis

npm i connect-redis --save
Copier après la connexion

Le code est le suivant :

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

var RedisStore = require('connect-redis')(session);

var app = express()
app.use(cookieParser())

var options = {
  host: '127.0.0.1',
  port: 6379,
  db: 1, // Database index to use. Defaults to Redis's default (0).
  prefix: 'ID:' // Key prefix defaulting to "sess:"
  // pass: 'aaa' // Password for Redis authentication
}

const hour = 1000 * 60 * 60;
var sessionOpts = {
  store: new RedisStore(options),
  // 设置密钥
  secret: 'a cool secret',
  // Forces the session to be saved back to the session store
  resave: true,
  // Forces a session that is "uninitialized" to be saved to the store.
  saveUninitialized: true,
  // 设置会话cookie名
  key: 'myapp_sid',
  // If secure is set to true, and you access your site over HTTP, the cookie will not be set.
  cookie: { maxAge: hour * 8, secure: false }
}
app.use(session(sessionOpts)) // 如果没有secret,会提醒 Error: secret option required for sessions

app.use(function(req, res, next) {
  if (req.url === '/favicon.ico') {
    return
  }

  var sess = req.session;
  var id = req.sessionID; // session ID, 只读
  console.log(sess, id);

  if (sess.views) {
    sess.views++; // 如果放在res.end()后,不会自增
    res.setHeader('Content-Type', 'text/html');
    res.write('<p>views: ' + sess.views + '</p>');
    res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
    res.end();
  } else {
    sess.views = 1;
    res.end('welcome to the session demo. refresh!');
  }
});

app.listen(4000);
Copier après la connexion

Dans le programme ci-dessus, les informations de session sont stockées dans le Base de données db1 de redis. Après l'exécution, actualisez le navigateur. Les informations dans la base de données sont les suivantes :

Quest-ce quune session dans un nœud ? Comment utiliser ?

la session est stockée dans mongoDb

.

Tout d'abord, vous devez installer connect- Le module mongo

npm i connect-mongo --save
Copier après la connexion

le code est le suivant :

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

var MongoStore = require('connect-mongo')(session);
const hour = 1000 * 60 * 60

var app = express()
app.use(cookieParser())
app.use(session({
  secret: 'a cool secret',
  key: 'mongo_sid',
  cookie: { maxAge: hour * 8, secure: false },
  resave: true,
  saveUninitialized: true,
  store: new MongoStore({
    url: 'mongodb://@localhost:27017/demodb'
  })
}));

app.use(function(req, res, next) {
  if (req.url === '/favicon.ico') {
    return
  }

  var sess = req.session;
  var id = req.sessionID; // session ID, 只读
  console.log(sess, id);

  if (sess.views) {
    sess.views++;
  } else {
    sess.views = 1;
  }

  res.setHeader('Content-Type', 'text/html');
  res.write('<p>views: ' + sess.views + '</p>');
  res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
  res.write('<p>httpOnly: ' + sess.cookie.httpOnly + '</p>');
  res.write('<p>path: ' + sess.cookie.path + '</p>');
  res.write('<p>secure: ' + sess.cookie.secure + '</p>');
  res.end();
});

app.listen(4000);
Copier après la connexion

Après l'exécution, actualisez la page du navigateur et constatez que les informations de session suivantes a été stocké dans la collection de sessions de la base de données demodb.

Quest-ce quune session dans un nœud ? Comment utiliser ?

Certaines personnes peuvent demander : le résultat est visible, mais que s'est-il passé dans le processus ?
En fait, lorsque le navigateur initie la première requête, le middleware de session générera un session对象 (qui contient des informations sur le cookie) Cet objet de session sera stocké dans la base de données mongoDb en même temps, lorsque la requête reviendra. , le client du navigateur Le client enregistrera automatiquement le cookie dans cet objet de session. Notez que le navigateur enregistre le cookie, pas l'objet de session.
Ce cookie a un délai d'expiration, par exemple celui défini dans le code ci-dessus est de 8 heures. Autrement dit, ce cookie disparaîtra automatiquement du navigateur au bout de 8 heures.

Recommandations associées :

Qu'est-ce que Session

Comment utiliser socket.io_node.js dans node express

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment trier l'index MongoDB Comment trier l'index MongoDB Apr 12, 2025 am 08:45 AM

L'indice de tri est un type d'index MongoDB qui permet de tri les documents dans une collection par champs spécifiques. La création d'un indice de tri vous permet de trier rapidement les résultats de la requête sans opérations de tri supplémentaires. Les avantages incluent le tri rapide, les requêtes de remplacement et le tri à la demande. La syntaxe est db.collection.CreateIndex ({champ: & lt; tri Ordre & gt;}), où & lt; tri, Ordre & gt; est 1 (ordre ascendant) ou -1 (ordre décroissant). Vous pouvez également créer des index de tri à plusieurs champs qui trient plusieurs champs.

Optimisation des performances postgresql sous Debian Optimisation des performances postgresql sous Debian Apr 12, 2025 pm 08:18 PM

Pour améliorer les performances de la base de données PostgreSQL dans Debian Systems, il est nécessaire de considérer de manière approfondie le matériel, la configuration, l'indexation, la requête et d'autres aspects. Les stratégies suivantes peuvent optimiser efficacement les performances de la base de données: 1. Extension de mémoire d'optimisation des ressources matérielles: la mémoire adéquate est cruciale pour cacher les données et les index. Stockage à grande vitesse: l'utilisation de disques SSD SSD peut considérablement améliorer les performances d'E / S. Processeur multi-core: utilisez pleinement les processeurs multi-core pour implémenter le traitement des requêtes parallèles. 2. Paramètre de base de données Tuning Shared_Buffers: Selon le réglage de la taille de la mémoire du système, il est recommandé de le définir à 25% -40% de la mémoire système. work_mem: contrôle la mémoire des opérations de tri et de hachage, généralement définies sur 64 Mo à 256m

MongoDB vs Oracle: modélisation des données et flexibilité MongoDB vs Oracle: modélisation des données et flexibilité Apr 11, 2025 am 12:11 AM

MongoDB convient plus pour le traitement des données non structurées et une itération rapide, tandis qu'Oracle convient plus aux scénarios qui nécessitent une cohérence stricte des données et des requêtes complexes. 1. Le modèle de document de MongoDB est flexible et adapté à la gestion des structures de données complexes. 2. Le modèle relationnel d'Oracle est strict pour assurer la cohérence des données et les performances de requête complexes.

Comment optimiser les performances de Debian Readdir Comment optimiser les performances de Debian Readdir Apr 13, 2025 am 08:48 AM

Dans Debian Systems, les appels du système ReadDir sont utilisés pour lire le contenu des répertoires. Si ses performances ne sont pas bonnes, essayez la stratégie d'optimisation suivante: simplifiez le nombre de fichiers d'annuaire: divisez les grands répertoires en plusieurs petits répertoires autant que possible, en réduisant le nombre d'éléments traités par appel ReadDir. Activer la mise en cache de contenu du répertoire: construire un mécanisme de cache, mettre à jour le cache régulièrement ou lorsque le contenu du répertoire change et réduire les appels fréquents à Readdir. Les caches de mémoire (telles que Memcached ou Redis) ou les caches locales (telles que les fichiers ou les bases de données) peuvent être prises en compte. Adoptez une structure de données efficace: si vous implémentez vous-même la traversée du répertoire, sélectionnez des structures de données plus efficaces (telles que les tables de hachage au lieu de la recherche linéaire) pour stocker et accéder aux informations du répertoire

Comment définir la commande mongodb Comment définir la commande mongodb Apr 12, 2025 am 09:24 AM

Pour configurer une base de données MongoDB, vous pouvez utiliser la ligne de commande (use et db.CreateCollection ()) ou le Shell Mongo (Mongo, Use et DB.CreateCollection ()). D'autres options de paramètre incluent la visualisation de la base de données (afficher DBS), la visualisation des collections (afficher les collections), la suppression de la base de données (DB.DropDatabase ()), la suppression des collections (DB. & Amp; lt; collection_name & amp; gt; .drop ()), insertion documents (db. & Amp; lt; collection;

Comprendre le nosql: caractéristiques clés de Redis Comprendre le nosql: caractéristiques clés de Redis Apr 13, 2025 am 12:17 AM

Les caractéristiques clés de Redis incluent la vitesse, la flexibilité et le support de structure de données riche. 1) Speed: Redis est une base de données en mémoire, et les opérations de lecture et d'écriture sont presque instantanées, adaptées à la gestion du cache et de la session. 2) Flexibilité: prend en charge plusieurs structures de données, telles que des chaînes, des listes, des collections, etc., qui conviennent au traitement des données complexes. 3) Prise en charge de la structure des données: fournit des chaînes, des listes, des collections, des tables de hachage, etc., qui conviennent aux différents besoins commerciaux.

Redis: identifier sa fonction principale Redis: identifier sa fonction principale Apr 12, 2025 am 12:01 AM

La fonction centrale de Redis est un système de stockage et de traitement de données en mémoire haute performance. 1) Accès aux données à grande vitesse: Redis stocke les données en mémoire et fournit une vitesse de lecture et d'écriture au niveau microseconde. 2) Rich Structure de données: prend en charge les chaînes, les listes, les collections, etc., et s'adapte à une variété de scénarios d'application. 3) Persistance: Persister les données sur le disque via RDB et AOF. 4) Publier l'abonnement: peut être utilisé dans les files d'attente de messages ou les systèmes de communication en temps réel.

Comment chiffrer les données dans Debian MongoDB Comment chiffrer les données dans Debian MongoDB Apr 12, 2025 pm 08:03 PM

Le chiffrement de la base de données MongoDB sur un système Debian nécessite de suivre les étapes suivantes: Étape 1: Installez d'abord MongoDB, assurez-vous que votre système Debian a installé MongoDB. Sinon, veuillez vous référer au document officiel MongoDB pour l'installation: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/step 2: générer le fichier de clé de cryptage Créer un fichier contenant la clé de chiffrement et définir les permissions correctes: ddif = / dev / urandof = / etc / mongodb-keyfilebs = 512

See all articles