session-Middleware
Installation
Dies ist ein Node.js Modul über die
npm Registry. Installation erfolgt mit dem
npm install Befehl:
$ npm install express-sessionAPI
var session = require('express-session');session(Optionen)
Erstellen Sie eine Session Middleware mit den angegebenen Optionen.
Notiz Sitzungsdaten werden nicht im Cookie selbst gespeichert, nur die Session-ID. Session-Daten werden serverseitig gespeichert.
Hinweis Seit Version 1.5.0 muss der cookie-parser middleware
nicht mehr verwendet werden, damit dieses Modul funktioniert. Dieses Modul liest nun direkt
und schreibt Cookies auf req/res. Die Verwendung von cookie-parser kann zu Problemen
führen, wenn das secret nicht das gleiche ist zwischen diesem Modul und dem cookie-parser.
Warnung Der standardmäßige serverseitige Sitzungsspeicher, MemoryStore, ist purposely
nicht für eine Produktionsumgebung konzipiert. Es leckt Speicher unter den meisten
-Bedingungen, skaliert nicht nach einem einzigen Prozess und ist für das Debuggen und
Entwicklung gedacht.
Eine Liste der Geschäfte finden Sie unter kompatible Session-Shopes.
Optionen
express-session akzeptiert diese Eigenschaften im Optionsobjekt.
kochen
Einstellungsobjekt für das Session-ID-Cookie. Der Standardwert ist
{ path: '/', httpOnly: true, secure: false, maxAge: null }.
Neben der Bereitstellung eines statischen Objekts können Sie auch eine Callback-Funktion übergeben, um die Cookie-Optionen für jede Anfrage dynamisch zu erzeugen. Der Callback erhält das req Objekt als Argument und sollte ein Objekt mit den Cookie-Einstellungen zurückgeben.
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, }; }, }));Die folgenden Optionen können in diesem Objekt gesetzt werden.
cookie.domain
Gibt den Wert für das Domain Set-Cookie Attribut an. Standardmäßig ist keine Domain
gesetzt und die meisten Clients betrachten das Cookie als nur für die aktuelle
Domain.
cookie.expires
Gibt das Date Objekt als Wert für das Expires Set-Cookie Attribut an.
Standardmäßig ist kein Ablauf gesetzt und die meisten Clients werden dies als einen
“nicht-persistenten Cookie” betrachten und ihn unter einer Bedingung löschen, wie zum Beispiel das Beenden eines Browsers
Programms.
Notiz Wenn sowohl expires als auch maxAge in den Optionen gesetzt werden, dann ist das letzte
im Objekt was verwendet wird.
Notiz Die expires Option sollte nicht direkt gesetzt werden, sondern nur die maxAge
Option verwenden.
cookie.httpOnly
Gibt den boolean Wert für das HttpOnly Set-Cookie Attribut an. Wenn Wahrheit,
das HttpOnly Attribut gesetzt ist, andernfalls nicht. Standardmäßig ist das Attribut HttpOnly
gesetzt.
Notiz Seien Sie vorsichtig, wenn Sie dies auf true setzen, da konforme Clients es nicht zulassen, dass
clientseitigem JavaScript das Cookie in document.cookie sieht.
cookie.maxAge
Legt die number (in Millisekunden) fest, die bei der Berechnung des Expires
Set-Cookie Attributs verwendet werden soll. Dies geschieht, indem Sie die aktuelle Serverzeit nehmen und
maxAge Millisekunden zu dem Wert hinzufügen, um eine Expires Datumszeit zu berechnen. Standardmäßig ist
kein Maximalalter gesetzt.
Notiz Wenn sowohl expires als auch maxAge in den Optionen gesetzt werden, dann ist das letzte
im Objekt was verwendet wird.
cookie.partitioniert
Gibt den boolean Wert für das Partitioned Set-Cookie
Attribut an. Wenn Wahrheit, ist das Partitioned Attribut gesetzt, andernfalls nicht.
Standardmäßig ist das Attribut Partitioned nicht gesetzt.
Notiz Dies ist ein Attribut, das noch nicht vollständig standardisiert wurde und in Zukunft ändern kann. Dies bedeutet auch, dass viele Kunden dieses Attribut ignorieren können, bis sie es verstehen.
Weitere Informationen finden Sie in dem Vorschlag.
cookie.path
Gibt den Wert für Path Set-Cookie an. Standardmäßig wird dies auf `’/’ gesetzt, welcher
der Wurzelpfad der Domain ist.
cookie.priorität
Legt den string als Wert für das Priority Set-Cookie Attribut fest.
'low'setzt das AttributPriorityaufLow.'medium'setzt das AttributPriorityaufMedium, die Standardpriorität, wenn nicht gesetzt.'high'setzt das AttributPriorityaufHigh.
Weitere Informationen über die verschiedenen Prioritätsstufen finden Sie unter die Spezifikation.
Notiz Dies ist ein Attribut, das noch nicht vollständig standardisiert wurde und sich in Zukunft ändern kann. Dies bedeutet auch, dass viele Clients dieses Attribut ignorieren können, bis sie es verstehen.
cookie.sameSite
Bestimmt die boolean oder string als Wert für das SameSite Set-Cookie Attribut an.
Standardmäßig ist dies false.
truesetzt dasSameSiteAttribut aufStrictfür die strikte Durchsetzung derselben Site.falsesetzt nicht dasSameSite-Attribut.'lax'setzt dasSameSite-Attribut aufLaxfür die lax gleiche Site-Durchsetzung.'none'setzt dasSameSiteAttribut aufNonefür ein explizites Cross-Site Cookie.'strict'setzt dasSameSite-Attribut aufStrictfür die strikte Durchsetzung derselben Site.'auto'setzt dasSameSiteAttribut aufNonefür sichere Verbindungen undLaxfür unsichere Verbindungen.
Weitere Informationen über die verschiedenen Durchsetzungsstufen finden Sie unter die Spezifikation.
Notiz Dies ist ein Attribut, das noch nicht vollständig standardisiert wurde und in Zukunft in ändern kann. Dies bedeutet auch, dass viele Clients dieses Attribut ignorieren können, bis sie es verstehen.
Hinweis Es gibt ein Entwurfsspekta
das erfordert, dass das Secure Attribut auf true gesetzt wird, wenn das Attribut SameSite
auf `‘none’ gesetzt wurde. Einige Web-Browser oder andere Clients übernehmen diese Spezifikation.
Die Option cookie.sameSite kann auch auf den Sonderwert 'auto' gesetzt werden, damit diese Einstellung
automatisch mit der festgestellten Sicherheit der Verbindung übereinstimmt. Wenn die Verbindung
sicher ist (HTTPS), wird das Attribut SameSite auf None gesetzt, um Site-übergreifende Nutzung zu aktivieren.
When the connection is not secure (HTTP), the SameSite attribute will be set to Lax for
better security while maintaining functionality. Dies ist nützlich, wenn die Express "trust proxy"
Einstellung korrekt eingerichtet ist, um die Entwicklung vs Produktionskonfiguration zu vereinfachen, insbesondere
für SAML Authentifizierungsszenarien.
cookie.secure
Gibt den boolean Wert für das Secure Set-Cookie Attribut an. Wenn Wahrheit,
das Secure Attribut gesetzt ist, andernfalls nicht. Standardmäßig ist das Attribut Secure
nicht gesetzt.
Notiz Sei vorsichtig, wenn du dies auf true setzst, da konforme Clients in Zukunft nicht
das Cookie an den Server zurücksenden werden, wenn der Browser keine HTTPS
Verbindung hat.
Bitte beachte, dass secure: true eine empfohlen Option ist. Es erfordert jedoch
eine https-fähige Website, d.h. HTTPS ist für sichere Cookies notwendig. Wenn secure
gesetzt ist und Sie auf Ihre Seite über HTTP zugreifen, wird das Cookie nicht gesetzt. Wenn Sie
Ihre node.js hinter einem Proxy haben und secure: true verwenden, müssen Sie
“trust proxy” in express setzen:
var app = express();app.set('trust proxy', 1); // trust first proxyapp.use( session({ secret: 'keyboard cat', resave: false, saveUninitialized: true, cookie: { secure: true }, }));Für die Verwendung sicherer Cookies in der Produktion, aber für Tests in der Entwicklung
das folgende Beispiel ist ein Beispiel für die Aktivierung dieses Setups basierend auf NODE_ENV in 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));Die Option cookie.secure kann auch auf den speziellen Wert 'auto' gesetzt werden, damit diese Einstellung
automatisch mit der festgestellten Sicherheit der Verbindung übereinstimmt. 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. Diese
ist nützlich, wenn die Express "trust proxy" Einstellung richtig eingerichtet ist, um die
Entwicklung vs Produktionskonfiguration zu vereinfachen.
genid
Funktion, um eine neue Session-ID zu generieren. Geben Sie eine Funktion an, die
einen String zurückgibt, der als Session-ID verwendet wird. The function is given req as the
first argument if you want to use some value attached to req when generating
the ID.
Der Standardwert ist eine Funktion, die die uid-safe Bibliothek verwendet, um IDs zu generieren.
HINWEIS Achten Sie darauf, eindeutige IDs zu generieren, damit Ihre Sitzungen keinen Konflikt auslösen.
app.use( session({ genid: function (req) { return genuuid(); // use UUIDs for session IDs }, secret: 'keyboard cat', }));name
Der Name des Session-ID-Cookies, der in der Antwort gesetzt wird (und von der in der -Anfrage gelesen wird).
Der Standardwert ist 'connect.sid'.
Notiz wenn mehrere Apps auf demselben Hostnamen laufen (dies ist nur
der Name, d.h. localhost oder 127.0.0. ; verschiedene Schemas und Ports sind nicht
ein anderer Hostname), dann müssen Sie die Session-Cookies von
trennen. Die einfachste Methode ist einfach verschiedene names pro App zu setzen.
proxy
Vertrauen Sie dem Reverse Proxy beim Setzen sicherer Cookies (über den “X-Forwarded-Proto” Header).
Der Standardwert ist nicht definiert.
trueDer “X-Forwarded-Proto” Header wird verwendet.falseAlle Header werden ignoriert und die Verbindung wird nur als sicher angesehen, wenn es eine direkte TLS/SSL-Verbindung gibt.undefinedverwendet die “trust proxy”-Einstellung von express
neuladen
Erzwingt die Sitzung, wieder im Session-Store zu speichern, selbst wenn die Sitzung während der Anfrage nie geändert wurde. Abhängig von Ihrem Shop könnte dies notwendig sein aber es kann auch Rennbedingungen schaffen, bei denen ein Client zwei parallele Anfragen an Ihren Server stellt und Änderungen an der Sitzung in einer Anfrage können überschrieben werden, wenn die andere Anfrage beendet ist. auch wenn es keine Änderungen vorgenommen hat (dieses Verhalten hängt auch davon ab, welcher Shop Sie verwenden).
Der Standardwert ist true, aber die Verwendung des Standardwertes wurde veraltet,
als Standardwert wird sich in Zukunft ändern. Bitte prüfen Sie diese Einstellung
und wählen Sie aus, was für Ihren Anwendungsfall geeignet ist. Normalerweise willst du
false.
Woher weiß ich, ob dies für meinen Shop notwendig ist? Der beste Weg, um zu wissen, ist
mit Ihrem Shop zu überprüfen, ob er die touch Methode implementiert. Wenn das der Fall ist, dann
können Sie sicher resave: false setzen. Wenn die touch
Methode nicht implementiert wird und Ihr Shop ein Ablaufdatum für gespeicherte Sitzungen festlegt, dann müssen Sie
wahrscheinlich resave: true.
rollen
Erzwingen Sie das Session-Identifikator-Cookie bei jeder Antwort zu setzen. Die Ablaufzeit
wird auf das Original maxAge, zurückgesetzt und das Ablaufdatum
Countdown zurückgesetzt.
Der Standardwert ist false.
Wenn dies aktiviert ist, das Session-Identifikator-Cookie wird in
maxAge ablaufen, da die letzte Antwort statt in
maxAge, da die Sitzung zuletzt vom Server geändert wurde.
Dies wird in der Regel in Verbindung mit kurz nicht-Sitzungslänge
maxAge Werte um eine schnelle Zeitüberschreitung der Sitzungsdaten
mit reduziertem Potenzial zu bieten, dass sie während laufender Serverinteraktionen auftreten.
Notiz Wenn diese Option auf true gesetzt ist, aber die saveUninitialized Option ist
auf false gesetzt, das Cookie wird nicht auf eine Antwort mit einer nicht initialisierten
Sitzung gesetzt. Diese Option ändert nur das Verhalten, wenn eine bestehende Sitzung
für die Anfrage geladen wurde.
saveUninitialisiert
Zwingt eine Sitzung, die “uninitialisiert” ist, in den Store gespeichert werden. Eine Sitzung ist
uninitialisiert, wenn sie neu ist, aber nicht geändert wurde. Das Auswählen von false ist nützlich für
Anmeldesitzungen, die Reduzierung der Speicherauslastung des Servers oder die Einhaltung von
Gesetzen, die eine Erlaubnis erfordern, bevor ein Cookie gesetzt wird. Das Auswählen von false wird auch
bei Rennbedingungen helfen, bei denen ein Client mehrere parallele Anfragen
ohne Sitzung stellt.
Der Standardwert ist true, aber die Verwendung des Standardwerts wurde veraltet, da sich die Voreinstellung
in Zukunft ändern wird. Bitte prüfen Sie diese Einstellung und wählen Sie
, was für Ihren Anwendungsfall geeignet ist.
Notiz wenn Sie Session in Verbindung mit PassportJS verwenden Passport fügt ein leeres Passport-Objekt zur Sitzung hinzu, nachdem ein Benutzer authentifiziert ist , was als Änderung der Sitzung behandelt wird, wodurch gespeichert wird. Dies wurde in PassportJS 0.3.0 behoben
geheim
Benötigte Option
Dies ist das Geheimnis, das benutzt wird, um das Session-ID-Cookie zu signieren. Das Geheimnis kann jeder Typ
des Wertes sein, der von Node.js crypto.createHmac unterstützt wird (wie ein String oder ein
Buffer). Dies kann entweder ein einzelnes Geheimnis oder ein Array von mehreren Geheimnissen sein. Wenn
ein Array von Geheimnissen angegeben wird, wird nur das erste Element verwendet, um das
Sitzungs-ID-Cookie zu signieren während alle Elemente bei der Überprüfung der
Signatur in Anfragen berücksichtigt werden. Das Geheimnis selbst sollte nicht leicht von einem Menschen geparst werden und
wäre am besten eine zufällige Anzahl von Zeichen. Eine bewährte Praxis kann sein:
- Die Verwendung von Umgebungsvariablen, um das Geheimnis zu speichern, stellt sicher, dass das Geheimnis selbst nicht in Ihrem Repository existiert.
- Periodische Aktualisierungen des Geheimnisses, während das vorherige Geheimnis im Array liegt.
Die Verwendung eines Geheimnisses, das nicht erraten werden kann, wird die Fähigkeit verringern, eine Sitzung an
zu entführen, indem nur die Session-ID erraten wird (wie durch die genid Option bestimmt).
Das Ändern des geheimen Wertes wird alle bestehenden Sessions ungültig machen. Um das Geheimnis zu drehen, ohne Sitzungen zu löschen, gib ein Array von Geheimnissen, mit dem neuen Geheimnis als erstes Element des Arrays und mit vorherigen Geheimnissen als die späteren Elemente.
Notiz HMAC-256 wird benutzt um die Session-ID zu signieren. Aus diesem Grund sollte das Geheimnis mindestens 32 Bytes Entropie enthalten.
speichern
Die Session-Shop-Instanz ist standardmäßig eine neue MemoryStore-Instanz.
entfernt
Kontrollieren Sie das Ergebnis der Einstellung req.session (durch delete, Einstellung auf null,
etc.).
Der Standardwert ist `‘keep’.
'destroy'Die Sitzung wird zerstört (gelöscht), wenn die Antwort endet.'keep'Die Sitzung im Shop wird beibehalten, aber Änderungen während werden ignoriert und nicht gespeichert.
req.session
Um Sitzungsdaten zu speichern oder zuzugreifen, verwenden Sie einfach die Request-Eigenschaft req. ession,
, was im Allgemeinen als JSON serialisiert wird, also verschachtelte Objekte
sind typischerweise in Ordnung. Zum Beispiel unten ist ein benutzerspezifischer Ansichtszähler:
// Use the session middlewareapp.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 } }));
// Access the session as req.sessionapp.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)
Um die Sitzung neu zu generieren, rufen Sie einfach die Methode auf. Nach Abschluss wird
eine neue SID und Session Instanz auf req.session
initialisiert und der callback wird aufgerufen.
req.session.regenerate(function (err) { // will have a new session here});Session.destroy(Rückruf)
Zerstört die Sitzung und wird die req.session Eigenschaft entfernen.
Sobald der Callback abgeschlossen ist, wird der Callback aufgerufen.
req.session.destroy(function (err) { // cannot access session here});Session.reload(Callback)
Lädt die Sitzungsdaten aus dem Shop neu und füllt das
req.session Objekt neu. Sobald der Callback abgeschlossen ist, wird der Callback aufgerufen.
req.session.reload(function (err) { // session updated});Session.save(Callback)
Speichere die Session zurück im Shop, Ersetzen der Inhalte im Shop durch den Inhalt im Speicher (obwohl ein Shop etwas anderes tun kann - konsultieren Sie die Dokumentation für exaktes Verhalten.
Diese Methode wird automatisch am Ende der HTTP-Antwort aufgerufen, wenn die -Sitzungsdaten geändert wurden (obwohl dieses Verhalten mit verschiedenen Optionen im Middleware-Konstruktor geändert werden kann). Aus diesem Grund muss diese Methode nicht aufgerufen werden.
Es gibt einige Fälle, in denen es nützlich ist, diese Methode aufzurufen, zum Beispiel Umleitungen, langlebige Anfragen oder in WebSockets.
req.session.save(function (err) { // session saved});Session.touch()
Aktualisiert die .maxAge Eigenschaft. Normalerweise ist dies
nicht notwendig, da die Session-Middleware dies für Sie tut.
req.session.id
Jede Sitzung hat eine eindeutige ID, die damit verbunden ist. Diese Eigenschaft ist ein
-Alias für req.sessionID und kann nicht geändert werden.
Es wurde hinzugefügt, um die Session-ID vom session
Objekt zugänglich zu machen.
req.session.cookies
Jede Session hat ein einzigartiges Cookie-Objekt, das sie begleitet. Dies erlaubt es
das Session-Cookie pro Besucher zu ändern. Zum Beispiel können wir
req.session.cookie.expires auf false setzen, damit das Cookie
nur für die Dauer des User-Agents erhalten bleibt.
Cookie.maxAge
Alternatively req.session.cookie.maxAge will return the time
remaining in milliseconds, which we may also re-assign a new value
to adjust the .expires property appropriately. Folgende
sind im Wesentlichen äquivalent
var hour = 3600000;req.session.cookie.expires = new Date(Date.now() + hour);req.session.cookie.maxAge = hour;Zum Beispiel, wenn maxAge auf 60000 gesetzt ist (eine Minute), und 30 Sekunden
ist abgelaufen und wird 30000 zurückgeben, bis die aktuelle Anfrage abgeschlossen ist,
zu welcher Zeit req. ession.touch() wird aufgerufen, um
req.session.cookie.maxAge auf seinen ursprünglichen Wert zurückzusetzen.
req.session.cookie.maxAge; // => 30000Cookie.originalMaxAge
Die Eigenschaft req.session.cookie.originalMaxAge gibt die ursprüngliche Eigenschaft
maxAge (Time-to-live) in Millisekunden des Session Cookie zurück.
req.sessionID
Um die ID der geladenen Sitzung zu erhalten, greifen Sie auf die Request-Eigenschaft
req.sessionID zu. Dies ist einfach ein schreibgeschützter Wert, wenn eine Sitzung
geladen oder erstellt wird.
Implementierung des Session-Shops
Jeder Session-Shop must ein EventEmitter sein und bestimmte
-Methoden implementieren. Die folgenden Methoden sind die Liste von required, empfohlen,
und optional.
- Benötigte Methoden sind solche, die dieses Modul immer im Shop aufrufen wird.
- Empfohlene Methoden sind solche, die dieses Modul im Shop aufruft, wenn verfügbar ist.
- Optionale Methoden sind solche, die dieses Modul überhaupt nicht aufruft, hilft aber den Benutzern einheitliche Geschäfte zu präsentieren.
Zum Beispiel sehen Sie sich die connect-redis Repo an.
store.all(callback)
Optional
Diese optionale Methode wird verwendet, um alle Sessions im Shop als Array zu erhalten. Der
callback sollte als callback(error, sessions) aufgerufen werden.
store.destroy(sid, callback)
Erforderlich
Diese benötigte Methode wird verwendet, um eine Sitzung aus dem Store zu löschen/löschen, der
eine Session-ID (sid). Der callback sollte als callback(error) aufgerufen werden, sobald
die Sitzung zerstört wurde.
store.clear(callback)
Optional
Diese optionale Methode wird verwendet, um alle Sitzungen aus dem Shop zu löschen. Der
callback sollte als callback(error) aufgerufen werden, sobald der Store gelöscht wurde.
store.length(callback)
Optional
Diese optionale Methode wird verwendet, um die Anzahl aller Sitzungen im Shop zu erhalten.
Der callback sollte als callback(error, len) aufgerufen werden.
store.get(sid, callback)
Erforderlich
Diese benötigte Methode wird verwendet, um eine Session aus dem Shop zu bekommen, die eine
-ID (sid). Der callback sollte als callback(error, session) aufgerufen werden.
Das session Argument sollte eine Session sein, wenn es gefunden wird, sonst null oder
undefined wenn die Session nicht gefunden wurde (und es gab keinen Fehler). Ein spezieller
Fall wird gemacht, wenn error.code === 'ENOENT' wie callback(null, null) agiert.
store.set(sid, session, callback)
Erforderlich
Diese benötigte Methode wird verwendet, um eine Session in den Store hochzuladen, der ein
Session-ID (sid) und ein Session-Objekt (session) übergeben wurde. Der Callback sollte
als callback(error) aufgerufen werden, sobald die Sitzung im Store festgelegt wurde.
store.touch(sid, session, callback)
Empfohlen
Diese empfohlene Methode wird verwendet, um eine bestimmte Sitzung zu “berühren”, die ein
Session-ID (sid) und ein Session-(session) Objekt gegeben hat. Der callback sollte
als callback(error) aufgerufen werden, sobald die Sitzung berührt wurde.
Dies wird in erster Linie verwendet, wenn der Shop die Leerlaufsitzungen automatisch löscht und diese Methode verwendet wird, um zu signalisieren, dass die angegebene Sitzung aktiv ist, könnte den Leerlauf-Timer zurücksetzen.
Kompatible Session Stores
Die folgenden Module implementieren einen Session-Shop, der mit diesem -Modul kompatibel ist. Bitte machen Sie einen PR um zusätzliche Module hinzuzufügen :)
![★][aerospike-session-store-image] [aerospike-session-store-image] Aerospike-session-store Ein Session-Shop mit Aerospike.
[![★][better-sqlite3-session-store-image] besser sqlite3-session-store][better-sqlite3-session-store-url] Ein Session-Shop basierend auf better-sqlite3.
![★][cassandra-store-image] cassandra-store Ein Apache Cassandra-basierter Session-Store.
![★][cluster-store-image] Cluster-Store Ein Wrapper für In-Process / embedded Stores - wie SQLite (via Knex), leveldb, Dateien oder Speicher - mit Knoten-Cluster (wünschenswert für Raspberry Pi 2 und andere Multi-Core-Embedded Geräte).
[![★][connect-arango-image] connect-arango][connect-arango-url] Ein ArangoDB-basierter Session-Shop.
[![★][connect-azuretables-image] connect-azuretables][connect-azuretables-url] An Azure Table Storage-based session store.
[![★][connect-cloudant-store-image] connect-cloudant-store][connect-cloudant-store-url] An IBM Cloudant-based session store.
[![★][connect-cosmosdb-image] connect-cosmosdb][connect-cosmosdb-url] An Azure Cosmos DB-based session store.
[![★][connect-couchbase-image] connect-couchbase][connect-couchbase-url] A couchbase-based session store.
[![★][connect-datacache-image] connect-datacache][connect-datacache-url] An IBM Bluemix Data Cache-based session store.
![★][@google-cloud/connect-datastore-image] @google-cloud/connect-datastore A Google Cloud Datastore-based session store.
[![★][connect-db2-image] connect-db2][connect-db2-url] Ein IBM DB2-basierter Session-Store, der mit ibm_db Modul erstellt wurde.
[![★][connect-dynamodb-image] connect-dynamodb][connect-dynamodb-url] Ein DynamoDB-basierter Session-Store.
![★][@google-cloud/connect-firestore-image] @google-cloud/connect-firestore A Google Cloud Firestore-based session store.
[![★][connect-hazelcast-image] connect-hazelcast][connect-hazelcast-url] Hazelcast Session Store für Connect and Express.
[![★][connect-loki-image] connect-loki][connect-loki-url] Ein Loki.js-basierter Session-Shop.
![★][connect-lowdb-image] connect-lowdb Ein Lowdb-basierter Session-Shop.
[![★][connect-memcached-image] connect-memcached][connect-memcached-url] Ein memcached-basierter Session-Shop.
[![★][connect-memjs-image] connect-memjs][connect-memjs-url] Ein memcached-basierter Session-Shop mit memjs als memcached client.
[![★][connect-ml-image] connect-ml][connect-ml-url] Ein MarkLogic Server basierter Session-Store.
[![★][connect-monetdb-image] connect-monetdb][connect-monetdb-url] Ein MonetDB-basierter Session-Store.
[![★][connect-mongo-image] connect-mongo][connect-mongo-url] Ein MongoDB-basierter Session-Shop.
[![★][connect-mongodb-session-image] connect-mongodb-session][connect-mongodb-session-url] Leichtgewichtiger MongoDB-basierter Session-Shop gebaut und gepflegt von MongoDB.
![★][connect-mssql-v2-image] connect-mssql-v2 Ein Microsoft SQL Server basierter Session-Store basierend auf connect-mssql.
[![★][connect-neo4j-image] connect-neo4j][connect-neo4j-url] A Neo4j-based session store.
![★][connect-ottoman-image] connect-ottoman A couchbase ottoman-based session store.
[![★][connect-pg-simple-image] connect-pg-simple][connect-pg-simple-url] Ein PostgreSQL-basierter Session-Store.
[![★][connect-redis-image] connect-redis][connect-redis-url] Ein Redis-basierter Session-Shop.
[![★][connect-session-firebase-image] connect-session-firebase][connect-session-firebase-url] Ein Session-Shop basierend auf der Firebase Echtzeit-Datenbank
[![★][connect-session-knex-image] connect-session-knex][connect-session-knex-url] Ein Session-Shop mit Knex.js, , der ein SQL-Query Builder für PostgreSQL, MySQL, MariaDB, SQLite3 und Oracle ist.
![★][connect-session-sequelize-image] connect-session-sequelize Ein Session-Shop mit Sequelize.js, einem Knoten. s / io.js ORM für PostgreSQL, MySQL, SQLite und MSSQL.
![★][connect-sqlite3-image] connect-sqlite3 A SQLite3 Session Store modelliert nach dem TJ’s connect-redis Store.
[![★][connect-typeorm-image] connect-typeorm][connect-typeorm-url] A TypeORM-based session store.
![★][couchdb-expression-image] couchdb-expression A CouchDB-based session store.
![★][dynamodb-store-image] Dynamodb-store Ein DynamoDB-basierter Session-Shop.
![★][dynamodb-store-v3-image] dynamodb-store-v3 Implementierung eines Session-Shops mit DynamoDB unterstützt durch das AWS SDK für JavaScript v3.
![★][express-etcd-image] express-etcd Ein etcd basierter Session-Shop.
![★][express-mysql-session-image] express-mysql-session Ein Session-Shop mit nativer MySQL über das node-mysql Modul.
![★][express-nedb-session-image] express-nedb-session Ein NeDB-basierter Session-Shop.
![★][express-oracle-session-image] express-oracle-session Ein Session-Shop mit nativer oracle über das node-oracledb Modul.
![★][express-session-cache-manager-image] express-session-cache-manager Ein Shop, der cache-manager, implementiert und unterstützt eine Vielzahl von Speichertypen.
![★][express-session-etcd3-image] express-session-etcd3 Ein etcd3 basierter Session-Store.
![★][express-session-level-image] express-session-level A LevelDB basierter Session-Store.
![★][express-session-rsdb-image] express-session-rsdb Session Store basierend auf Rocket-Store: Eine sehr einfache, super schnelle und dennoch leistungsstarke, flache Datei-Datenbank.
![★][express-sessions-image] express-sessions Ein Session-Shop, der sowohl MongoDB als auch Redis unterstützt.
![★][firestore-store-image] firestore-store A Firestore-based session store.
![★][fortune-session-image] fortune-session A Fortune.js basierter Session-Shop. Unterstützt alle von Fortune unterstützten Backends (MongoDB, Redis, Postgres, NeDB).
![★][hazelcast-store-image] Haselcast-Store Ein Hazelcast-basierter Session-Shop, gebaut auf dem Hazelcast Node Client.
![★][level-session-store-image] level-session-store Ein LevelDB-basierter Session-Shop.
![★][lowdb-session-store-image] lowdb-session-store A lowdb-based session store.
![★][medea-session-store-image] Medea-session-store Ein Medea-basierter Session-Shop.
![★][memorystore-image] Memorystore Ein Speicher-Session-Speicher für die Produktion.
![★][mssql-session-store-image] mssql-session-store Ein SQL Server basierter Session-Store.
![★][nedb-session-store-image] nedb-session-store Ein alternativer NeDB-basierter (entweder im Speicher oder in der Datei persistiert) Session-Store.
![★][@quixo3/prisma-session-store-image] @quixo3/prisma-session-store Ein Session Store für das Prisma Framework.
![★][restsession-image] Restsession Store-Sitzungen mit einer RESTful API
![★][sequelstore-connect-image] sequelstore-connect Ein Session-Shop mit Sequelize.js.
![★][session-file-store-image] session-file-store Ein Datei-systembasierter Session-Store.
![★][session-pouchdb-store-image] session-pouchdb-store Session Store für PouchDB / CouchDB. Akzeptiert eingebettete, benutzerdefinierte oder entfernte PouchDB-Instanz und Echtzeit-Synchronisation.
![★][@cyclic.sh/session-store-image] @cyclic.sh/session-store Ein DynamoDB-basierter Session Store für Cyclic.sh Apps.
[![★][@databasunker/session-store-image] @databasunker/session-store][@databasunker/session-store-url] A Databunker-based encrypted session store.
![★][sessionstore-image] sessionstore Ein Session-Shop, der mit verschiedenen Datenbanken arbeitet.
![★][tch-nedb-session-image] tch-nedb-session Ein Dateisystem Session Store basierend auf NeDB.
Beispiele
Zähler anzeigen
Ein einfaches Beispiel mit der express-session um Seitenaufrufe für einen Benutzer zu speichern.
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);Benutzeranmeldung
Ein einfaches Beispiel mit express-session, um eine Benutzeranmeldung durchzuführen.
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 authenticatedfunction 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);Debuggen
Dieses Modul verwendet das debug Modul intern um Informationen über Sitzungsoperationen zu protokollieren.
Um alle internen Protokolle zu sehen, setze die DEBUG Umgebungsvariable auf
express-session beim Starten deiner App (npm start, in diesem Beispiel):
$ DEBUG=express-session npm startVerwenden Sie unter Windows den entsprechenden Befehl;
> set DEBUG=express-session & npm start