Qu'est-ce qu'une session dans un nœud ? Comment utiliser ?
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.
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
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);
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
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);
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 :
la session est stockée dans mongoDb
.Tout d'abord, vous devez installer connect- Le module mongo
npm i connect-mongo --save
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);
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.
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 :
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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 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.

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

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;

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.

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.

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
