middleware de session

Installation

Ceci est un module Node.js disponible via npm registry. L’installation se fait à l’aide de la commande npm install:

Terminal window
$ npm install express-session

API

var session = require('express-session');

session(options)

Créer un middleware de session avec les options données.

Note Les données de session ne sont pas enregistrées dans le cookie lui-même, juste l’ID de session. Les données de session sont stockées côté serveur.

Note Since version 1.5.0, the cookie-parser middleware no longer needs to be used for this module to work. Ce module lit maintenant directement et écrit des cookies sur req/res. L’utilisation de cookie-parser peut entraîner des problèmes si le secret n’est pas le même entre ce module et cookie-parser.

Avertissement Le stockage de session côté serveur par défaut, MemoryStore, est utile pas conçu pour un environnement de production. Il fuira de la mémoire dans la plupart des conditions , n’échelonne pas au-delà d’un seul processus, et est destiné au débogage et au développement de .

Pour une liste de magasins, voir [boutiques compatibles de session] (#compatible-session-stores).

Options

express-session accepte ces propriétés dans l’objet d’options.

Objet Paramètres pour le cookie ID de session. La valeur par défaut est { path: '/', httpOnly: true, secure: false, maxAge: null }.

En plus de fournir un objet statique, vous pouvez également passer une fonction de rappel pour générer dynamiquement les options de cookie pour chaque requête. Le callback reçoit l’objet req comme argument et doit retourner un objet contenant les paramètres des cookies.

var app = express();
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: function (req) {
var match = req.url.match(/^\/([^/]+)/);
return {
path: match ? '/' + match[1] : '/',
httpOnly: true,
secure: req.secure || false,
maxAge: 60000,
};
},
})
);

Les options suivantes peuvent être définies dans cet objet.

Spécifie la valeur de l’attribut Set-Cookie. Par défaut, aucun domaine n’est défini, et la plupart des clients considéreront que le cookie s’applique uniquement au domaine actuel.

Spécifie l’objet Date pour être la valeur de l’attribut Expires Set-Cookie. By default, no expiration is set, and most clients will consider this a “non-persistent cookie” and will delete it on a condition like exiting a web browser application.

Note Si les deux expires et maxAge sont définis dans les options, alors le dernier défini dans l’objet est ce qui est utilisé.

Note L’option expires ne doit pas être définie directement; à la place, utilisez uniquement l’option maxAge .

httpOnly

Spécifie la valeur boolean pour l’attribut HttpOnly Set-Cookie. Quand vrai, l’attribut HttpOnly est défini, sinon il ne l’est pas. Par défaut, l’attribut HttpOnly est défini.

Note Soyez prudent lorsque vous définissez ceci sur true, car les clients conformes n’autoriseront pas JavaScript côté client à voir le cookie dans document.cookie.

maxage des cookies

Spécifie le nombre (en millisecondes) à utiliser lors du calcul de l’attribut Expires Set-Cookie. Ceci est fait en prenant l’heure actuelle du serveur et en ajoutant maxAge millisecondes à la valeur pour calculer une date Expires. Par défaut, aucun âge maximum n’est défini.

Note Si les deux expires et maxAge sont définis dans les options, alors le dernier défini dans l’objet est ce qui est utilisé.

Partitionné

Spécifie la valeur boolean pour l’attribut Partitioned Set-Cookie . Quand vrai, l’attribut Partitioned est défini, sinon ce n’est pas le cas. Par défaut, l’attribut Partitioned n’est pas défini.

Note This is an attribute that has not yet been fully standardized, and may change in the future. Cela signifie également que de nombreux clients peuvent ignorer cet attribut jusqu’à ce que le comprenne.

Plus d’informations à propos de la proposition peuvent être trouvées dans [la proposition] (https://github.com/privacycg/CHIPS).

Spécifie la valeur pour le Path Set-Cookie. Par défaut, cette valeur est définie à '/', qui est le chemin racine du domaine.

Spécifie la string pour être la valeur de l’attribut [Priority Set-Cookierfc-west-cookie-priority-00-4.1.

  • 'low' définira l’attribut Priority à Low.
  • 'medium' définira l’attribut Priority à Medium, la priorité par défaut quand elle n’est pas définie.
  • 'high' définira l’attribut Priority à High.

Plus d’informations sur les différents niveaux de priorité peuvent être trouvées dans la spécification.

Note Ceci est un attribut qui n’a pas encore été entièrement normalisé, et peut changer à l’avenir. Cela signifie également que de nombreux clients peuvent ignorer cet attribut jusqu’à ce qu’ils le comprennent.

Site web du même type

Spécifie le boolean ou string pour être la valeur de l’attribut SameSite Set-Cookie. Par défaut, c’est false.

  • true définira l’attribut SameSite à Strict pour stricte même application du site.
  • false ne définira pas l’attribut SameSite.
  • 'lax' définira l’attribut SameSite à Lax pour le lax même application du site.
  • 'none' définira l’attribut SameSite à None pour un cookie intersite explicite.
  • 'strict' définira l’attribut SameSite à Strict pour stricte même application du site.
  • 'auto' définira l’attribut SameSite à None pour les connexions sécurisées et Lax pour les connexions non sécurisées.

Plus d’informations sur les différents niveaux d’application peuvent être trouvées dans la spécification.

Note Ceci est un attribut qui n’a pas encore été entièrement normalisé, et peut changer dans le futur. Cela signifie également que de nombreux clients peuvent ignorer cet attribut jusqu’à ce qu’ils le comprennent.

Note Il y a un draft spec qui requiert que l’attribut Secure soit défini à true lorsque l’attribut SameSite a été à 'none'. Certains navigateurs Web ou d’autres clients peuvent adopter cette spécification.

L’option cookie.sameSite peut également être définie à la valeur spéciale 'auto' pour avoir ce paramètre correspond automatiquement à la sécurité déterminée de la connexion. Lorsque la connexion est sécurisée (HTTPS), l’attribut SameSite sera défini à None pour activer l’utilisation inter-site. Lorsque la connexion n’est pas sécurisée (HTTP), l’attribut SameSite sera défini sur Lax pour une meilleure sécurité tout en maintenant la fonctionnalité. Ceci est utile lorsque le paramètre trust proxy Express est correctement configuré pour simplifier la configuration de développement vs production, en particulier pour les scénarios d’authentification SAML.

Sécurisé

Spécifie la valeur boolean pour l’attribut Secure Set-Cookie. Quand vrai, l’attribut Secure est défini, sinon il ne l’est pas. Par défaut, l’attribut Secure n’est pas défini.

Note be careful when setting this to true, as compliant clients will not send the cookie back to the server in the future if the browser does not have an HTTPS connection.

Veuillez noter que secure: true est une option recommandée . However, it requires an https-enabled website, i.e., HTTPS is necessary for secure cookies. Si secure est défini, et que vous accédez à votre site via HTTP, le cookie ne sera pas défini. Si vous avez vos node.js derrière un proxy et utilisez secure: true, vous devez définir “trust proxy” en express:

var app = express();
app.set('trust proxy', 1); // trust first proxy
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true },
})
);

Pour l’utilisation de cookies sécurisés en production, mais permettant des tests en développement, le suivant est un exemple d’activation de cette configuration basée sur NODE_ENV en express:

var app = express();
var sess = {
secret: 'keyboard cat',
cookie: {},
};
if (app.get('env') === 'production') {
app.set('trust proxy', 1); // trust first proxy
sess.cookie.secure = true; // serve secure cookies
}
app.use(session(sess));

L’option cookie.secure peut également être définie à la valeur spéciale 'auto' pour avoir ce paramètre correspond automatiquement à la sécurité déterminée de la connexion. Be careful when using this setting if the site is available both as HTTP and HTTPS, as once the cookie is set on HTTPS, it will no longer be visible over HTTP. Cette est utile lorsque le paramètre Express "trust proxy" est correctement configuré pour simplifier le développement vs la configuration de production.

genid

Fonction à appeler pour générer un nouvel identifiant de session. Fournir une fonction qui retourne une chaîne qui sera utilisée comme identifiant de session. La fonction est donnée req en tant que premier argument si vous voulez utiliser une valeur attachée à req lors de la génération de l’ID.

La valeur par défaut est une fonction qui utilise la bibliothèque uid-safe pour générer des IDs.

REMARQUE Faites attention à générer des identifiants uniques afin que vos sessions ne soient pas en conflit.

app.use(
session({
genid: function (req) {
return genuuid(); // use UUIDs for session IDs
},
secret: 'keyboard cat',
})
);
Nom

Le nom du cookie d’identification de session à définir dans la réponse (et à partir de la requête ).

La valeur par défaut est 'connect.sid'.

Note if you have multiple apps running on the same hostname (this is just the name, i.e. localhost or 127.0.0.1; different schemes and ports do not name a different hostname), then you need to separate the session cookies from each other. La méthode la plus simple est de simplement définir différents noms par application.

Proxy

Faire confiance au proxy inversé lors du réglage des cookies sécurisés (via l’en-tête “X-Forwarded-Proto” ).

La valeur par défaut est undefined.

  • true L’en-tête “X-Forwarded-Proto” sera utilisé.
  • false Tous les en-têtes sont ignorés et la connexion est considérée comme sécurisée seulement s’il y a une connexion TLS/SSL directe.
  • undefined Utilise le paramètre “trust proxy” de express
réactiver

Force la sauvegarde de la session dans la boutique de session, même si la session n’a jamais été modifiée pendant la requête. Depending on your store this may be necessary, but it can also create race conditions where a client makes two parallel requests to your server and changes made to the session in one request may get overwritten when the other request ends, even if it made no changes (this behavior also depends on what store you’re using).

La valeur par défaut est true, mais l’utilisation de la valeur par défaut a été dépréciée, comme valeur par défaut va changer dans le futur. Veuillez rechercher ce paramètre et choisir ce qui convient à votre cas d’utilisation. Généralement, vous voudrez false.

Comment savoir si cela est nécessaire pour mon magasin? La meilleure façon de savoir est de vérifier avec votre boutique si elle implémente la méthode touch. Si c’est le cas, alors vous pouvez définir resave: false en toute sécurité. Si elle n’implémente pas la méthode touch et que votre boutique définit une date d’expiration sur les sessions stockées, alors vous probablement besoin de resave: true.

roulant

Forcer le cookie d’identification de session à être défini sur chaque réponse. L’expiration est réinitialisée à l’original maxAge, réinitialisant le compte à rebours d’expiration.

La valeur par défaut est false.

Avec cette activation, le cookie d’identification de session expirera dans maxAge depuis que la dernière réponse a été envoyée au lieu de maxAge depuis que la session a été modifiée par le serveur.

Ceci est généralement utilisé en conjonction avec des courts, valeurs de longueur de session maxAge pour fournir un délai d’attente rapide pour les données de session avec un potentiel réduit en ce qui concerne les interactions de serveur en cours.

Note Lorsque cette option est définie à true mais l’option saveUninitialized est réglé sur false, le cookie ne sera pas défini sur une réponse avec une session non initialisée. This option only modifies the behavior when an existing session was loaded for the request.

Enregistrer non initialisé

Force une session qui est “non initialisée” à être enregistrée dans la boutique. A session is uninitialized when it is new but not modified. Choisir false est utile pour implémentant des sessions de connexion, réduisant l’utilisation du stockage du serveur, ou respectant les lois qui requièrent l’autorisation avant de définir un cookie. Le choix de false aidera également dans les conditions de course où un client fait plusieurs requêtes parallèles sans session.

La valeur par défaut est true, mais l’utilisation de la valeur par défaut a été dépréciée, car la valeur par défaut changera dans le futur. Veuillez rechercher ce paramètre et choisir ce qui convient à votre cas d’utilisation.

Note if you are using Session in conjunction with PassportJS, Passport will add an empty Passport object to the session for use after a user is authenticated, which will be treated as a modification to the session, causing it to be saved. Ceci a été corrigé dans PassportJS 0.3.0

secret

Option obligatoire

C’est le secret utilisé pour signer le cookie d’identification de session. Le secret peut être n’importe quel type de valeur qui est supporté par Node.js crypto.createHmac (comme une chaîne de caractères ou un Buffer ). Cela peut être soit un seul secret, soit un tableau de plusieurs secrets. Si un tableau de secrets est fourni, seul le premier élément sera utilisé pour signer le cookie ID de session, alors que tous les éléments seront considérés lors de la vérification de la signature dans les requêtes. Le secret lui-même ne devrait pas être facilement analysé par un humain et serait mieux un jeu de caractères aléatoire. Une meilleure pratique peut inclure :

  • L’utilisation de variables d’environnement pour stocker le secret, en s’assurant que le secret lui-même n’existe pas dans votre dépôt.
  • Mises à jour périodiques du secret, tout en s’assurant que le secret précédent est dans le tableau .

Utiliser un secret qui ne peut pas être deviné réduira la possibilité de détourner une session en seulement en devinant l’ID de session (comme déterminé par l’option genid).

La modification de la valeur secrète invalidera toutes les sessions existantes. Afin de faire pivoter le secret sans invalider les sessions, fournir un tableau de secrets, avec le nouveau secret comme premier élément du tableau, et y compris les secrets précédents comme les éléments suivants.

Note HMAC-256 est utilisé pour signer l’ID de session. For this reason, the secret should contain at least 32 bytes of entropy.

boutique

L’instance de la boutique de session est par défaut une nouvelle instance MemoryStore.

annuler

Contrôlez le résultat de la suppression de req.session (via delete, en définissant null, etc.).

La valeur par défaut est 'keep'.

  • 'détruire' La session sera détruite (supprimée) à la fin de la réponse.
  • 'keep' La session dans la boutique sera conservée, mais les modifications apportées pendant la requête sont ignorées et non sauvegardées.

session

Pour stocker ou accéder aux données de session, il suffit d’utiliser la propriété de requête req. ession, qui est (généralement) sérialisé en JSON par le magasin, donc les objets imbriqués sont généralement bien. Par exemple ci-dessous est un compteur de vue spécifique à l’utilisateur :

// Use the session middleware
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 } }));
// Access the session as req.session
app.get('/', function (req, res, next) {
if (req.session.views) {
req.session.views++;
res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + req.session.views + '</p>');
res.write('<p>expires in: ' + req.session.cookie.maxAge / 1000 + 's</p>');
res.end();
} else {
req.session.views = 1;
res.end('welcome to the session demo. refresh!');
}
});

Session.regenerate(callback)

Pour régénérer la session, il suffit d’appeler la méthode. Une fois terminé, une nouvelle instance SID et Session sera initialisée à req.session et le callback sera appelé.

req.session.regenerate(function (err) {
// will have a new session here
});

Session.destroy(callback)

Détruit la session et supprimera la propriété req.session. Une fois terminé, le callback sera appelé.

req.session.destroy(function (err) {
// cannot access session here
});

Session.reload(callback)

Recharge les données de session depuis la boutique et re-remplit l’objet req.session. Une fois terminé, le callback sera appelé.

req.session.reload(function (err) {
// session updated
});

Session.save(callback)

Enregistrer la session dans la boutique, remplacer le contenu de la boutique par le contenu en mémoire (bien qu’une boutique puisse faire autre chose —consultez la documentation de la boutique pour connaître le comportement exact).

Cette méthode est automatiquement appelée à la fin de la réponse HTTP si les données de la session ont été modifiées (bien que ce comportement puisse être modifié avec diverses options dans le constructeur du middleware). À cause de cela, typiquement cette méthode n’a pas besoin d’être appelée.

Il y a certains cas où il est utile d’appeler cette méthode, par exemple, les redirections , les requêtes de longue durée ou dans WebSockets.

req.session.save(function (err) {
// session saved
});

Session.touch()

Met à jour la propriété .maxAge. Généralement, c’est pas nécessaire pour appeler, car le middleware de session le fait pour vous.

ID de la session

Chaque session a un ID unique qui lui est associé. Cette propriété est un alias de req.sessionID et ne peut pas être modifiée. Il a été ajouté pour rendre l’ID de session accessible depuis l’objet session .

Chaque session a un objet unique de cookie l’accompagnant. This allows you to alter the session cookie per visitor. Par exemple, nous pouvons définir req.session.cookie.expires à false pour permettre au cookie de rester pour seulement la durée de l’agent utilisateur.

Cookie.maxAge

Alternativement req.session.cookie.maxAge retournera le temps restant en millisecondes, que nous pouvons également réaffecter une nouvelle valeur pour ajuster la propriété .expires de manière appropriée. Les suivants sont essentiellement équivalents

var hour = 3600000;
req.session.cookie.expires = new Date(Date.now() + hour);
req.session.cookie.maxAge = hour;

Par exemple lorsque maxAge est défini à 60000 (une minute), et 30 secondes s’est écoulé, il retournera 30000 jusqu’à ce que la requête actuelle soit terminée, à quel moment req. ession.touch() est appelé à réinitialiser req.session.cookie.maxAge à sa valeur originale.

req.session.cookie.maxAge; // => 30000

Nombre maximum de cookies

La propriété req.session.cookie.originalMaxAge retourne la maxAge originale (time-to-live), en millisecondes, du cookie de session.

ID de session

Pour obtenir l’ID de la session chargée, accédez à la propriété de requête req.sessionID. Ceci est simplement une valeur en lecture seule lorsque la session est chargée/créée.

Implémentation de la boutique de session

Chaque boutique de session doit être un EventEmitter et implémenter des méthodes spécifiques. Les méthodes suivantes sont la liste de requis, recommandé, et optionnel.

  • Les méthodes requises sont celles que ce module va toujours appeler sur la boutique.
  • Les méthodes recommandées sont celles que ce module appellera sur la boutique si est disponible.
  • Les méthodes optionnelles sont celles que ce module n’appelle pas du tout, mais aide à présenter des magasins uniformes aux utilisateurs.

Pour un exemple d’implémentation, consultez le dépôt connect-redis.

store.all(callback)

Optionnel

Cette méthode optionnelle est utilisée pour obtenir toutes les sessions dans le magasin en tant que tableau. Le callback doit être appelé comme callback(error, sessions).

store.destroy(sid, callback)

Requis

Cette méthode requise est utilisée pour détruire/supprimer une session de la boutique donnée à un ID de session (sid). Le callback doit être appelé comme callback(error) une fois la session est détruite.

store.clear(callback)

Optionnel

Cette méthode optionnelle est utilisée pour supprimer toutes les sessions de la boutique. Le callback doit être appelé comme callback(error) une fois que le magasin est effacé.

store.length(callback)

Optionnel

Cette méthode optionnelle est utilisée pour obtenir le nombre de sessions dans la boutique. Le callback doit être appelé comme callback(error, len).

store.get(sid, callback)

Requis

Cette méthode requise est utilisée pour obtenir une session de la boutique avec un ID de session (sid). Le callback doit être appelé comme callback(error, session).

L’argument session devrait être une session si trouvée, sinon null ou undefined si la session n’a pas été trouvée (et il n’y a pas d’erreur). Un cas spécial est fait lorsque error.code === 'ENOENT' agit comme callback(null, null).

store.set(sid, session, callback)

Requis

Cette méthode requise est utilisée pour mettre à jour une session dans le magasin avec un identifiant de session (sid) et un objet session (session). Le callback devrait être appelé comme callback(error) une fois que la session a été définie dans la boutique.

store.touch(sid, session, callback)

Recommandé

Cette méthode recommandée est utilisée pour “toucher” une session donnée avec un identifiant de session (sid) et un objet session (session). Le callback devrait être appelé comme callback(error) une fois que la session a été touchée.

Ceci est principalement utilisé lorsque le magasin supprimera automatiquement les sessions inactives et que cette méthode est utilisée pour signaler à la boutique la session donnée est active, réinitialisation potentielle de la minuterie inactive.

Magasins de sessions compatibles

Les modules suivants implémentent une boutique de session compatible avec ce module . Veuillez faire une PR pour ajouter des modules supplémentaires :)

[![Ω][aerospike-session-store-image] aerospike-session-store][aerospike-session-store-url] Un magasin de session utilisant Aerospike.

[![Ω][better-sqlite3-session-store-image] meilleur-sqlite3-session-store][better-sqlite3-session-store-url] Un magasin de session basé sur better-sqlite3.

![Ω][cassandra-store-image] cassandra-store Un magasin de session basé sur Apache Cassandra.

![Ω][cluster-store-image] cluster-store Un wrapper pour utiliser des magasins en cours / embarqués* tels que SQLite (via knex), leveldb, fichiers, ou mémoire - avec le cluster de noeuds (souhaitable pour le Raspberry Pi 2 et d’autres périphériques embarqués multi-cœurs).

![Ω][connect-arango-image] connect-arango Un magasin de sessions basé sur ArangoDB.

![Ω][connect-azuretables-image] connect-azuretables Une boutique de sessions basée sur la table Azre.

![Ω][connect-cloudant-store-image] connect-cloudant-store Une boutique de session basée sur IBM Cloudant.

![Ω][connect-cosmosdb-image] connect-cosmosdb Une boutique de session basée sur Cosmos DBazur.

[![Aujourd’hui][connect-couchbase-image] connect-couchbase][connect-couchbase-url] A couchbase basé sur la session.

![Ω][connect-datacache-image] connect-datacache Une boutique de session basée sur IBM Bluemix Data Cache.

![Ω][@google-cloud/connect-datastore-image] @google-cloud/connect-datastore A Google Cloud Datastore-based session store.

![Ω][connect-db2-image] connect-db2 Un magasin de session IBM basé sur DB2 construit en utilisant le module ibm_db.

![Ω][connect-dynamodb-image] connect-dynamodb Un magasin de sessions basé sur DynamoDB.

![Ω][@google-cloud/connect-firestore-image] @google-cloud/connect-firestore A Google Cloud Firestore-based session store.

[![Ω][connect-hazelcast-image] connect-hazelcast][connect-hazelcast-url] boutique de sessions Hazelcast pour Connect and Express.

![Ω][connect-loki-image] connect-loki Une boutique de session basée sur Loki.js.

![Ω][connect-lowdb-image] connect-lowdb Un magasin de sessions à base de basses bases.

[![Ω][connect-memcached-image] connect-memcached][connect-memcached-url] Un magasin de sessions basé sur memcached.

![Ω][connect-memjs-image] connect-memjs Un magasin de sessions basé sur memcached en utilisant memjs comme client memcached.

![Ω][connect-ml-image] connect-ml Une boutique de session basée sur le serveur MarkLogic .

![Ω][connect-monetdb-image] connect-monetdb Un magasin de sessions basé sur MonetDB.

![Ω][connect-mongo-image] connect-mongo Une boutique de sessions basée sur la MongoDB.

[![Ω][connect-mongodb-session-image] connect-mongodb-session][connect-mongodb-session-url] Léger magasin de session basé sur MongoDB construit et maintenu par MongoDB.

![Ω][connect-mssql-v2-image] connect-mssql-v2 Une boutique de session basée sur Microsoft SQL Server basée sur connect-mssql.

![Ω][connect-neo4j-image] connect-neo4j Une boutique de session basée sur Neo4j.

[![Ω][connect-ottoman-image] connect-ottoman][connect-ottoman-url] A couchbase ottomanbasé sur la boutique de session.

![Ω][connect-pg-simple-image] connect-pg-simple Une boutique de session basée sur PostgreSQL.

![Ω][connect-redis-image] connect-redis Un magasin de session basé sur Redis.

![Ω][connect-session-firebase-image] connect-session-firebase Une boutique de session basée sur la Base de données en temps réel Fire

[![Ω][connect-session-knex-image] connect-session-knex][connect-session-knex-url] Une boutique de session utilisant Knex.js, qui est un constructeur de requêtes SQL pour PostgreSQL, MySQL, MariaDB, SQLite3 et Oracle.

![Ω][connect-session-sequelize-image] connect-session-sequelize Un magasin de session utilisant Sequelize.js, qui est un nœud. s / io.js ORM pour PostgreSQL, MySQL, SQLite et MSSQL.

![Ω][connect-sqlite3-image] connect-sqlite3 A SQLite3 boutique de session modélisée après la boutique connect-redis de TJ.

![Aujourd’hui][connect-typeorm-image] connect-typeorm A TypeORM basé sur la boutique de session.

[![Ω][couchdb-expression-image] couchdb-expression][couchdb-expression-url] Une boutique de session basée sur CouchDB.

![Ω][dynamodb-store-image] dynamodb-store Un magasin de sessions basé sur DynamoDB.

![Ω][dynamodb-store-v3-image] dynamodb-store-v3 Implémentation d’une boutique de session en utilisant DynamoDB soutenue par le AWS SDK for JavaScript v3.

![Ω][express-etcd-image] express-etcd Une boutique de session basée sur etcd.

![Ω][express-mysql-session-image] express-mysql-session Un magasin de session utilisant le module MySQL via le module node-mysql.

![Ω][express-nedb-session-image] express-nedb-session Un magasin de sessions basé sur NeDB.

![Ω][express-oracle-session-image] express-oracle-session Un magasin de session utilisant le module oracle natif via le module node-oracledb.

[![★][express-session-cache-manager-image] express-session-cache-manager][express-session-cache-manager-url] A store that implements cache-manager, which supports a variety of storage types.

![Ω][express-session-etcd3-image] express-session-etcd3 Une boutique de session basée sur etcd3.

[![Aujourd’hui][express-session-level-image] express-session-level][express-session-level-url] A LevelDB basé sur la boutique de session.

![★][express-session-rsdb-image] express-session-rsdb Session store based on Rocket-Store: A very simple, super fast and yet powerful, flat file database.

[![Ω][express-sessions-image] express-sessions][express-sessions-url] Une boutique de session soutenant à la fois MongoDB et Redis.

![Aujourd’hui][firestore-store-image] boutique de pompiers Une boutique de session basée sur Firestore.

[![Aujourd’hui][fortune-session-image] session de fortune][fortune-session-url] A Fortune.js boutique de session. Supporte tous les backends supportés par Fortune (MongoDB, Redis, Postgres, NeDB).

![Ω][hazelcast-store-image] hazelcast-store A Un magasin de session basé sur Hazelcast construit sur le client du noeud Hazelcast.

[![Ω][level-session-store-image] level-session-store][level-session-store-url] A LevelDB-based session store.

[![Ω][lowdb-session-store-image] lowdb-session-store][lowdb-session-store-url] A lowdb basé sur la boutique de session.

[![Ω][medea-session-store-image] medea-session-store][medea-session-store-url] Un magasin de session basé sur la Médea.

![Ω][memorystore-image] memorystore Une boutique de sessions de mémoire faite pour la production.

[![Ω][mssql-session-store-image] mssql-session-store][mssql-session-store-url] Une boutique de sessions basée sur SQL Server.

[![Ω][nedb-session-store-image] nedb-session-store][nedb-session-store-url] Un magasin de sessions NeDB alternatif (soit en mémoire ou file-persisted).

[![Ω][@quixo3/prisma-session-store-image] @quixo3/prisma-session-store][@quixo3/prisma-session-store-url] A session store for the Cadre Prisma.

[![Ω][restsession-image] restsession][restsession-url] Magasin de sessions utilisant une API RESTful

[![Ω][sequelstore-connect-image] sequelstore-connect][sequelstore-connect-url] Un magasin de session utilisant Sequelize.js.

[![Ω][session-file-store-image] session-file-store][session-file-store-url] Une boutique de sessions basée sur un système de fichiers.

[![Ω][session-pouchdb-store-image] session-pochdb-store][session-pouchdb-store-url] Boutique de session pour PouchDB / CouchDB. Accepte l’instance PouchDB intégrée, personnalisée ou distante et la synchronisation en temps réel.

![Ω][@cyclic.sh/session-store-image] @cyclic.sh/session-store A DynamoDB-based session store for Cyclic.sh apps.

![Ω][@databasunker/session-store-image] @databasunker/session-store A A A A A Databunkerbased encrypted session store.

[![Ω][sessionstore-image] sessionstore][sessionstore-url] Une boutique de session qui fonctionne avec diverses bases de données.

[![Ω][tch-nedb-session-image] tch-nedb-session][tch-nedb-session-url] Un magasin de sessions système de fichiers basé sur NeDB.

Exemples

Compteur de vue

Un exemple simple en utilisant express-session pour stocker des vues de page pour un utilisateur.

var express = require('express');
var parseurl = require('parseurl');
var session = require('express-session');
var app = express();
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
})
);
app.use(function (req, res, next) {
if (!req.session.views) {
req.session.views = {};
}
// get the url pathname
var pathname = parseurl(req).pathname;
// count the views
req.session.views[pathname] = (req.session.views[pathname] || 0) + 1;
next();
});
app.get('/foo', function (req, res, next) {
res.send('you viewed this page ' + req.session.views['/foo'] + ' times');
});
app.get('/bar', function (req, res, next) {
res.send('you viewed this page ' + req.session.views['/bar'] + ' times');
});
app.listen(3000);

Connexion de l’utilisateur

Un exemple simple en utilisant express-session pour garder un utilisateur connecté en session.

var escapeHtml = require('escape-html');
var express = require('express');
var session = require('express-session');
var app = express();
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
})
);
// middleware to test if authenticated
function isAuthenticated(req, res, next) {
if (req.session.user) next();
else next('route');
}
app.get('/', isAuthenticated, function (req, res) {
// this is only called when there is an authentication user due to isAuthenticated
res.send('hello, ' + escapeHtml(req.session.user) + '!' + ' <a href="/logout">Logout</a>');
});
app.get('/', function (req, res) {
res.send(
'<form action="/login" method="post">' +
'Username: <input name="user"><br />' +
'Password: <input name="pass" type="password"><br />' +
'<input type="submit" text="Login"></form>'
);
});
app.post('/login', express.urlencoded({ extended: false }), function (req, res) {
// login logic to validate req.body.user and req.body.pass
// would be implemented here. for this example any combo works
// regenerate the session, which is good practice to help
// guard against forms of session fixation
req.session.regenerate(function (err) {
if (err) next(err);
// store user information in session, typically a user id
req.session.user = req.body.user;
// save the session before redirection to ensure page
// load does not happen before session is saved
req.session.save(function (err) {
if (err) return next(err);
res.redirect('/');
});
});
});
app.get('/logout', function (req, res, next) {
// logout logic
// clear the user from the session object and save.
// this will ensure that re-using the old session id
// does not have a logged in user
req.session.user = null;
req.session.save(function (err) {
if (err) next(err);
// regenerate the session, which is good practice to help
// guard against forms of session fixation
req.session.regenerate(function (err) {
if (err) next(err);
res.redirect('/');
});
});
});
app.listen(3000);

Débogage

This module uses the debug module internally to log information about session operations.

Pour voir tous les journaux internes, définissez la variable d’environnement DEBUG à express-session lors du lancement de votre application (npm start, dans cet exemple) :

Terminal window
$ DEBUG=express-session npm start

Sous Windows, utilisez la commande correspondante ;

Terminal window
> set DEBUG=express-session & npm start

Licence

MIT