programa de sesión
Instalación
Este es un módulo Node.js disponible a través del
npm registry. La instalación se realiza usando el comando
npm install:
$ npm install express-sessionAPI
var session = require('express-session');sesión(opciones)
Crea un middleware de sesión con las options dadas.
Nota Los datos de la sesión no se guardan en la cookie misma, sólo el ID de la sesión. Los datos de sesión se almacenan en el servidor.
Nota Desde la versión 1.5.0, el middleware de cookie-parser
ya no necesita ser usado para que este módulo funcione. Este módulo ahora lee directamente
y escribe cookies en req/res. Usar cookie-parser puede resultar en problemas
si el secret no es el mismo entre este módulo y cookie-parser.
Atención El almacenamiento predeterminado de sesión del lado del servidor, MemoryStore, no está propósitamente
diseñado para un entorno de producción. Va a filtrar memoria en la mayoría de condiciones
, no se escala más allá de un solo proceso, y está destinado a depurar y desarrollarse
.
Para una lista de tiendas, vea tiendas de sesión compatibles.
Opciones
express-session acepta estas propiedades en el objeto de opciones.
galleta
Objeto de configuración para la cookie ID de sesión. El valor predeterminado es
{ path: '/', httpOnly: true, secure: false, maxAge: null }.
Además de proporcionar un objeto estático, también puede pasar una función de callback para generar dinámicamente las opciones de cookie para cada petición. El callback recibe el objeto req como su argumento y debería devolver un objeto que contenga la configuración de la cookie.
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, }; }, }));Las siguientes son opciones que se pueden establecer en este objeto.
cookie.domain
Especifica el valor del atributo Dominio Set-Cookie. Por defecto, no se establece ningún dominio
, y la mayoría de los clientes considerarán que la cookie se aplicará sólo al dominio
actual.
cookie.expires
Especifica que el objeto Fecha sea el valor del atributo Expires Set-Cookie.
De forma predeterminada, no se establece ningún vencimiento y la mayoría de los clientes considerarán esto una “cookie no persistente”
y la borrará en una condición como salir de una aplicación de navegador web
.
Nota Si tanto expires como maxAge se establecen en las opciones, entonces la última
definida en el objeto es la que se utiliza.
Nota La opción expires no debe establecerse directamente; en su lugar, solo utiliza la opción maxAge
.
sólo cookie.httpOnly
Especifica el valor boolean para el atributo HttpOnly Set-Cookie. Cuando es verdadero,
el atributo HttpOnly está definido, de lo contrario no lo es. Por defecto, el atributo HttpOnly
está establecido.
Note be careful when setting this to true, as compliant clients will not allow
client-side JavaScript to see the cookie in document.cookie.
cookie.maxAge
Especifica el number (en milisegundos) a usar al calcular el atributo Expires
Set-Cookie. Esto se hace tomando la hora actual del servidor y agregando
maxAge milisegundos al valor para calcular una fecha de Expires. Por defecto,
no se ha establecido la edad máxima.
Nota Si tanto expires como maxAge se establecen en las opciones, entonces la última
definida en el objeto es la que se utiliza.
cookie.particionado
Especifica el valor boolean para el atributo Partitioned Set-Cookie
. Cuando sea verdadero, se establece el atributo Partitioned, de lo contrario no lo es.
Por defecto, el atributo Partitioned no está establecido.
Note This is an attribute that has not yet been fully standardized, and may change in the future. This also means many clients may ignore this attribute until they understand it.
Puede encontrar más información en la propuesta.
cookie.path
Especifica el valor de Path Set-Cookie. Por defecto, esto se establece en '/', que
es la ruta raíz del dominio.
cookie.priority
Especifica que la cadena sea el valor para el [Priority atributo Set-Cookie][rfc-west-cookie-priority-00-4.1].
'low'establecerá el atributoPriorityaLow.'medium'establecerá el atributoPriorityaMedium, la prioridad por defecto cuando no se establezca.'high'establecerá el atributoPriorityaHigh.
Puede encontrar más información sobre los diferentes niveles de prioridad en [la especificación][rfc-west-cookie-priority-00-4.1].
Nota Este es un atributo que aún no ha sido completamente estandarizado y puede cambiar en el futuro. Esto también significa que muchos clientes pueden ignorar este atributo hasta que lo entiendan.
cookie.sameSite
Especifica el valor boolean o string para el atributo SameSite Set-Cookie.
Por defecto, esto es false.
trueestablecerá el atributoSameSiteaStrictpara estricto cumplimiento del mismo sitio.falseno establecerá el atributoSameSite.'lax'establecerá el atributoSameSiteaLaxpara la aplicación laxa del mismo sitio.'ninguno 'establecerá el atributoSameSiteaNingunopara una cookie explícita de cross-site.'strict'establecerá el atributoSameSiteaStrictpara el mismo cumplimiento estricto del sitio.'auto'establecerá el atributoSameSiteaNingunopara conexiones seguras yLaxpara conexiones no seguras.
Puede encontrar más información sobre los diferentes niveles de cumplimiento en la especificación.
Nota Este es un atributo que aún no ha sido completamente estandarizado y puede cambiar en el futuro. Esto también significa que muchos clientes pueden ignorar este atributo hasta que lo entiendan.
Nota Hay un borrador de especificación
que requiere que el atributo Secure se establezca a true cuando el atributo SameSite ha sido
establecido a 'Ninguno'. Algunos navegadores web u otros clientes pueden estar adoptando esta especificación.
La opción cookie.sameSite también puede establecerse en el valor especial 'auto' para tener
esta configuración se ajusta automáticamente a la seguridad determinada de la conexión. Cuando la conexión
es segura (HTTPS), el atributo SameSite se establecerá en Ning para habilitar el uso a través del sitio.
Cuando la conexión no es segura (HTTP), el atributo SameSite se establecerá en Lax para
mejor seguridad manteniendo funcionalidad. Esto es útil cuando la configuración Express "trust proxy"
está configurada correctamente para simplificar la configuración de desarrollo vs producción de producción, especialmente
para escenarios de autenticación SAML.
cookie.secure
Especifica el valor boolean para el atributo Secure Set-Cookie. Cuando es verdadero,
el atributo Secure está definido, de lo contrario no lo es. Por defecto, el atributo Secure
no está definido.
Nota ten cuidado al establecer esto a true, como clientes compatibles no enviarán
la cookie de vuelta al servidor en el futuro si el navegador no tiene una conexión HTTPS
.
Por favor, ten en cuenta que secure: true es una opción recomendada. Sin embargo, requiere
un sitio web habilitado para https, por ejemplo, HTTPS es necesario para cookies seguras. Si secure
está definido, y usted accede a su sitio a través de HTTP, la cookie no se establecerá. Si usted
tiene su node.js detrás de un proxy y está usando secure: true, necesita establecer
“proxy de confianza” en expresión:
var app = express();app.set('trust proxy', 1); // trust first proxyapp.use( session({ secret: 'keyboard cat', resave: false, saveUninitialized: true, cookie: { secure: true }, }));Para usar cookies seguras en producción, pero permitiendo pruebas en desarrollo,
el siguiente es un ejemplo de habilitar esta configuración basada en 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));La opción cookie.secure también puede establecerse en el valor especial 'auto' para tener
esta configuración se ajusta automáticamente a la seguridad determinada de la conexión. 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. Esta
es útil cuando la configuración Express "trust proxy" está correctamente configurada para simplificar
desarrollo vs configuración de producción.
genid
Función para llamar para generar una nueva sesión de ID. Proporciona una función que devuelve
una cadena que se utilizará como ID de sesión. La función es dada req como el primer argumento
si quieres usar algún valor adjunto a req al generar
el ID.
El valor por defecto es una función que utiliza la librería uid-safe para generar IDs.
NOTA ten cuidado de generar IDs únicos para que tus sesiones no estén en conflicto.
app.use( session({ genid: function (req) { return genuuid(); // use UUIDs for session IDs }, secret: 'keyboard cat', }));nombre
El nombre de la cookie de identificación de sesión a establecer en la respuesta (y leer desde la solicitud ).
El valor por defecto es '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. El método más simple es simplemente establecer diferentes names por aplicación.
proxy
Confie en el proxy inverso al establecer cookies seguras (a través del encabezado “X-Forwarded-Proto” ).
El valor por defecto es undefined.
trueLa cabecera “X-Forwarded-Proto” será usada.falseTodos los encabezados son ignorados y la conexión se considera segura solo si hay una conexión directa TLS/SSL.undefinedUtiliza la opción de “proxy de confianza” de Express
resguardar
Fuerza que la sesión se guarde de nuevo en la tienda de la sesión, incluso si la sesión nunca fue modificada durante la solicitud. Dependiendo de su tienda, esto puede ser necesario, pero también puede crear condiciones de carrera donde un cliente hace dos peticiones paralelas a tu servidor y los cambios realizados a la sesión en una solicitud se pueden sobrescribir cuando finalice la otra solicitud, incluso si no hizo cambios (este comportamiento también depende de qué tienda está usando).
El valor por defecto es true, pero usar el valor por defecto ha sido obsoleto,
ya que el valor por defecto cambiará en el futuro. Por favor, investiga este ajuste
y elige lo que es apropiado para tu caso de uso. Normalmente, querrás
falso.
¿Cómo sé si esto es necesario para mi tienda? The best way to know is to
check with your store if it implements the touch method. Si lo hace, entonces
puedes establecer con seguridad resave: false. Si no implementa el método touch
y su tienda establece una fecha de vencimiento en sesiones almacenadas, entonces
probablemente necesite resave: true.
rodando
Forzar que la cookie de identificación de sesión se establezca en cada respuesta. La expiración
se restablece a la cuenta regresiva maxAge, restableciendo la cuenta regresiva de la expiración
.
El valor por defecto es false.
Con esto activado, la cookie de identificación de sesión expirará en
maxAge desde que la última respuesta fue enviada en lugar de en
maxAge desde la última sesión modificada por el servidor.
Esto se usa típicamente en conjunto con corto, longitud de sesión
maxAge valores para proporcionar un tiempo de espera rápido de los datos de sesión
con un potencial reducido de que ocurra durante las interacciones del servidor en curso.
Nota Cuando esta opción se establece en true pero la opción saveUninitialized es
establecido a false, la cookie no se establecerá en una respuesta con una sesión
sin inicializar. Esta opción solo modifica el comportamiento cuando se cargó una sesión existente
para la solicitud.
guardar sin inicializar
Fuerza una sesión que está “sin inicializar” a ser guardada en la tienda. Una sesión está
desinicializada cuando es nueva pero no modificada. Elegir false es útil para
implementar sesiones de inicio de sesión, reducir el uso de almacenamiento del servidor o cumplir con
leyes que requieren permiso antes de configurar una cookie. Elegir false también ayudará
con las condiciones de carrera donde un cliente hace múltiples peticiones paralelas
sin una sesión.
El valor por defecto es true, pero usar el valor por defecto ha sido desaprobado, ya que el valor predeterminado
cambiará en el futuro. Por favor, investiga esta configuración y
elige lo que es apropiado para tu caso de uso.
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. Esto ha sido arreglado en PassportJS 0.3.0
secreto
Opción requerida
Este es el secreto utilizado para firmar la cookie de identificación de sesión. The secret can be any type
of value that is supported by Node.js crypto.createHmac (like a string or a
Buffer). Esto puede ser un único secreto, o un conjunto de múltiples secretos. Si
se proporciona un array de secretos, solo se utilizará el primer elemento para firmar la cookie de identificación de sesión
, mientras que todos los elementos se considerarán cuando se verifique la firma
en solicitudes. El secreto en sí no debe ser fácilmente analizado por un humano y
sería mejor ser un conjunto aleatorio de caracteres. Una mejor práctica puede incluir:
- El uso de variables de entorno para almacenar el secreto, asegurando que el propio secreto no existe en su repositorio.
- Actualizaciones periídicas del secreto, al mismo tiempo que se asegura que el secreto anterior esté en el arreglo .
Usar un secreto que no se puede adivinar reducirá la capacidad de secuestrar una sesión a
sólo adivinando el ID de sesión (como lo determina la opción genid).
Cambiar el valor secreto invalidará todas las sesiones existentes. Para rotar el secreto sin invalidar sesiones, proporciona un array de secretos, con el nuevo secreto como primer elemento de la matriz, e incluyendo secretos anteriores como los elementos posteriores.
Nota HMAC-256 se utiliza para firmar el ID de sesión. Por esta razón, el secreto debe contener al menos 32 bytes de entropía.
tienda
La instancia de la tienda de sesiones, por defecto una nueva instancia de MemoryStore.
inactivo
Controla el resultado de desestablecer req.session (a través de delete, configurando a null,
etc.).
El valor por defecto es 'keep'.
'destroy'La sesión será destruida (eliminada) cuando la respuesta termine.'keep'La sesión en la tienda se tomará, pero las modificaciones realizadas durante la solicitud son ignoradas y no guardadas.
req.sesión
Para almacenar o acceder a datos de sesión, simplemente utilice la propiedad req. ession,
que está (generalmente) serializado como JSON por el almacenamiento, por lo que los objetos anidados
normalmente son correctos. Por ejemplo a continuación hay un contador de vista específico del usuario:
// 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)
Para regenerar la sesión simplemente invocar el método. Una vez completado,
una nueva instancia de SID y Session será inicializada en req.session
y el callback será invocado.
req.session.regenerate(function (err) { // will have a new session here});Session.destroy(callback)
Destruye la sesión y quitará la propiedad req.session.
Una vez completado, el callback será invocado.
req.session.destroy(function (err) { // cannot access session here});Session.reload(callback)
Recarga los datos de sesión de la tienda y rellena el objeto
req.session. Una vez completado, el callback será invocado.
req.session.reload(function (err) { // session updated});Session.save(callback)
Guardar la sesión de vuelta a la tienda, reemplazando el contenido de la tienda con el contenido en memoria (aunque una tienda puede hacer algo más—consulte la documentación de la tienda para obtener un comportamiento exacto).
This method is automatically called at the end of the HTTP response if the session data has been altered (though this behavior can be altered with various options in the middleware constructor). Debido a esto, normalmente este método no necesita ser llamado.
Hay algunos casos en los que es útil llamar a este método, por ejemplo, redireccionamientos , peticiones de larga duración o en WebSockets.
req.session.save(function (err) { // session saved});Session.touch()
Actualiza la propiedad .maxAge. Normalmente esto es
no necesario para llamar, ya que el middleware de sesión lo hace por usted.
req.session.id
Cada sesión tiene un ID único asociado con ella. Esta propiedad es un alias
de req.sessionID y no se puede modificar.
Se ha añadido para hacer el ID de sesión accesible desde el objeto session
.
cookie
Cada sesión tiene un objeto cookie único que la acompaña. This allows
you to alter the session cookie per visitor. Por ejemplo, podemos establecer
req.session.cookie.expires en false para permitir que la cookie
permanezca solo por la duración del agente de usuario.
Cookie.maxAge
Alternativamente req.session.cookie.maxAge devolverá el tiempo restante
en milisegundos, que también podemos volver a asignar un nuevo valor
para ajustar la propiedad .expires apropiadamente. La siguiente
son esencialmente equivalentes
var hour = 3600000;req.session.cookie.expires = new Date(Date.now() + hour);req.session.cookie.maxAge = hour;Por ejemplo cuando maxAge se establece en 60000 (un minuto), y 30 segundos
ha transcurrido, devolverá 30000 hasta que la solicitud actual se haya completado,
en ese momento req. ession.touch() es llamado para restablecer
req.session.cookie.maxAge a su valor original.
req.session.cookie.maxAge; // => 30000Cookie.originalMaxAge
La propiedad req.session.cookie.originalMaxAge devuelve el
maxAge original (tiempo para vivir), en milisegundos, de la cookie de sesión.
ID de sesión
Para obtener el ID de la sesión cargada, accede a la propiedad
req.sessionID. Este es simplemente un valor de solo lectura establecido cuando una sesión
es cargada/creada.
Implementación de la tienda de sesiones
Cada sesión almacena debe ser un EventEmitter e implementar métodos
específicos. Los siguientes métodos son la lista de requerido, recomendado,
y opcional.
- Los métodos requeridos son aquellos que este módulo siempre llamará en el almacén.
- Los métodos recomendados son aquellos que este módulo llamará en la tienda si está disponible.
- Los métodos opcionales son los que este módulo no llama en absoluto, pero ayuda a presentar tiendas uniforme a los usuarios.
Para ver un ejemplo de implementación ver el repositorio connect-redis.
store.all(callback)
Opcional
Este método opcional se utiliza para obtener todas las sesiones en la tienda como una matriz. El callback
debe ser llamado como callback(error, sessions).
store.destroy(sid, callback)
Requerido
Este método requerido se utiliza para destruir/eliminar una sesión de la tienda dada
un ID de sesión (sid). The callback should be called as callback(error) once
the session is destroyed.
store.clear(callback)
Opcional
Este método opcional se utiliza para eliminar todas las sesiones de la tienda. El
callback debe ser llamado como callback(error) una vez que la tienda es limpiada.
store.length(callback)
Opcional
Este método opcional se utiliza para obtener el recuento de todas las sesiones en la tienda.
El callback debe ser llamado como callback(error, len).
store.get(sid, callback)
Requerido
Este método requerido se utiliza para obtener una sesión de la tienda dada una sesión
ID (sid). El callback debe ser llamado como callback(error, session).
El argumento session debe ser una sesión si se encuentra, de lo contrario null o
undefined si la sesión no se encontró (y no hubo error). Un caso
especial se hace cuando error.code === 'ENOENT' para actuar como callback(null, null).
store.set(sid, session, callback)
Requerido
Este método requerido se utiliza para upsert una sesión en el almacén dado un ID de sesión
(sid) y objeto de sesión (session). The callback should be
called as callback(error) once the session has been set in the store.
store.touch(sid, session, callback)
Recomendado
Este método recomendado se utiliza para “tocar” una sesión dada con un ID de sesión
(sid) y objeto de sesión (session). El callback debe ser
llamado como callback(error) una vez que la sesión ha sido tocada.
Esto se utiliza principalmente cuando la tienda eliminará automáticamente las sesiones inactivas y este método se utiliza para indicar al almacén la sesión dada está activa, potencialmente reiniciando el temporizador inactivo.
Tiendas de sesiones compatibles
Los siguientes módulos implementan una tienda de sesiones que es compatible con este módulo . Por favor, haga un PR para añadir módulos adicionales :)
[![Ninguno][aerospike-session-store-image] aerospike-session-store][aerospike-session-store-url] Una tienda de sesiones con Aerospike.
[![Ninguno][better-sqlite3-session-store-image] mejor-sqlite3-session-store][better-sqlite3-session-store-url] Una tienda de sesiones basada en better-sqlite3.
![mañ][cassandra-store-image] tienda de cassandra una tienda de sesiones basada en Apache Cassandra.
[![Ninguno][cluster-store-image] cluster-store][cluster-store-url] Un envoltorio para usar tiendas incrustadas / incrustadas* como SQLite (a través de knex), leveldb, archivos o memoria - con cluster de nodos (deseable para Raspberry Pi 2 y otros dispositivos embebidos multi-núcleos).
[![mañ][connect-arango-image] connect-arango][connect-arango-url] Una tienda de sesiones basada en ArangoDB.
[![mañ][connect-azuretables-image] connect-azuretables][connect-azuretables-url] Una tienda de sesión basada en Azure Table Storage.
[![Ninguno][connect-cloudant-store-image] connect-cloudant-store][connect-cloudant-store-url] Una tienda de sesiones basada en IBM Cloudant.
[![mañ][connect-cosmosdb-image] connect-cosmosdb][connect-cosmosdb-url] Una tienda de sesiones basada en Azure Cosmos DB.
[![mañ][connect-couchbase-image] connect-couchbase][connect-couchbase-url] A couchbasebasada en tienda de sesiones.
[![mañ][connect-datacache-image] connect-datache][connect-datacache-url] Una tienda de sesiones basada en IBM Bluemix Data Cache.
![][@google-cloud/connect-datastore-image] @google-cloud/connect-datastore Un Google Cloud Datastoretienda de sesiones.
[![Ninguno][connect-db2-image] connect-db2][connect-db2-url] Un almacén de sesiones basado en IBM DB2 construido con ibm_db módulo.
[![Ninguno][connect-dynamodb-image] connect-dynamodb][connect-dynamodb-url] Una tienda de sesiones basada en DynamoDB.
![][@google-cloud/connect-firestore-image] @google-cloud/connect-firestore A Google Cloud Firestoretienda de sesiones.
[![Ninguno][connect-hazelcast-image] connect-hazelcast][connect-hazelcast-url] Tienda de sesiones Hazelcast para Connect and Express.
[![mañ][connect-loki-image] connect-loki][connect-loki-url] Una tienda de sesiones basada en Loki.js.
[![Ninguno][connect-lowdb-image] connect-lowdb][connect-lowdb-url] Una tienda de sesiones basada en lowdb.
[![Ninguno][connect-memcached-image] connect-memcached][connect-memcached-url] Una tienda de sesiones basada en memcached.
[![Ninguno][connect-memjs-image] connect-memjs][connect-memjs-url] Un almacén de sesiones basado en memcached usando memjs como cliente memcached.
[![Ninguno][connect-ml-image] connect-ml][connect-ml-url] Una tienda de sesiones basada en MarkLogic Server.
[![Ninguno][connect-monetdb-image] connect-monetdb][connect-monetdb-url] Una tienda de sesiones basada en MonetDB.
[![Ninguno][connect-mongo-image] connect-mongo][connect-mongo-url] Una tienda de sesiones basada en MongoDB.
[![Ninguno][connect-mongodb-session-image] connect-mongodb-session][connect-mongodb-session-url] Tienda de sesiones ligera basada en MongoDB construida y mantenida por MongoDB.
[![Ninguno][connect-mssql-v2-image] connect-msql-v2][connect-mssql-v2-url] Una tienda de sesiones basada en Microsoft SQL Server basada en connect-mssql.
[![A][connect-neo4j-image] connect-neo4j][connect-neo4j-url] A Neo4jbasada en tienda de sesiones.
[![Ninguno][connect-ottoman-image] connect-ottoman][connect-ottoman-url] Una tienda de sesiones basada en couchbase ottoman.
[![Ninguno][connect-pg-simple-image] connect-pg-simple][connect-pg-simple-url] Una tienda de sesiones basada en PostgreSQL.
[![Ninguno][connect-redis-image] connect-redis][connect-redis-url] Una tienda de sesiones basada en redistribución.
[![Ninguno][connect-session-firebase-image] connect-session-firebase][connect-session-firebase-url] Una tienda de sesiones basada en Firebase Realtime Database
[![Ninguno][connect-session-knex-image] connect-session-knex][connect-session-knex-url] Una tienda de sesiones con Knex.js, que es un generador de consultas SQL para PostgreSQL, MySQL, MariaDB, SQLite3 y Oracle.
[![Ninguno][connect-session-sequelize-image] connect-session-sequelize][connect-session-sequelize-url] Una tienda de sesiones usando Sequelize.js, que es un Nodo. s / ORM io.js para PostgreSQL, MySQL, SQLite y MSSQL.
![Ninguno][connect-sqlite3-image] connect-sqlite3 A SQLite3 tienda de sesiones modelada después de la tienda connect-redis del TJ.
[![Ninguno][connect-typeorm-image] conectar-tipo][connect-typeorm-url] A TypeORMbasado en tienda de sesiones.
[![mañ][couchdb-expression-image] couchdb-expression][couchdb-expression-url] A CouchDBbasada en tienda de sesiones.
[![Ninguno][dynamodb-store-image] dinamodb-store][dynamodb-store-url] Una tienda de sesiones basada en DynamoDB.
[![Ninguno][dynamodb-store-v3-image] dynamodb-store-v3][dynamodb-store-v3-url] Implementación de un almacén de sesiones usando DynamoDB respaldado por el AWS SDK para JavaScript v3.
[![★][express-etcd-image] express-etcd][express-etcd-url] An etcd based session store.
[![Ninguno][express-mysql-session-image] expresa ql-session][express-mysql-session-url] Una tienda de sesiones usando MySQL a través del módulo node-mysql.
[![Ninguno][express-nedb-session-image] express-nedb-session][express-nedb-session-url] Una tienda de sesiones basada en NeDB.
[![Ninguno][express-oracle-session-image] express-oracle-session][express-oracle-session-url] Un almacén de sesiones usando oracle a través del módulo node-oracledb.
![Ninguno][express-session-cache-manager-image] express-session-cache-manager Una tienda que implementa cache-manager, que soporta una variedad de tipos de almacenamiento.
[![★][express-session-etcd3-image] express-session-etcd3][express-session-etcd3-url] An etcd3 based session store.
[![Ninguno][express-session-level-image] express-session-level][express-session-level-url] A LevelDB basado en tienda de sesiones.
![Ninguno][express-session-rsdb-image] express-session-rsdb Tienda de sesiones basada en Rocket-Store: Una base de datos de archivos planos muy simple, super rápida y a la vez poderosa.
![Ninguno][express-sessions-image] express-sessions Una tienda de sesiones que soporta MongoDB y Redis.
[![Ninguno][firestore-store-image] firestore-tienda][firestore-store-url] A Firestorebasada tienda de sesiones.
[![Ninguno][fortune-session-image] sesión de fortuna][fortune-session-url] Fortune.js tienda de sesiones. Soporta todos los backends soportados por Fortune (MongoDB, Redis, Postgres, NeDB).
![Ninguno][hazelcast-store-image] tienda de avellanidad Una tienda de sesiones basada en Hazelcast construida en el Cliente del nodo Hazelcast.
[![Ninguno][level-session-store-image] nivel-session-store][level-session-store-url] Una tienda de sesiones basada en NivelDB.
[![Ninguno][lowdb-session-store-image] tienda de sesiones baja][lowdb-session-store-url] A lowdbtienda de sesiones.
[![mañ][medea-session-store-image] tienda medea-session-store][medea-session-store-url] una tienda de sesiones basada en Medea.
![★][memorystore-image] memorystore A memory session store made for production.
[![Ninguno][mssql-session-store-image] msql-session-store][mssql-session-store-url] Una tienda de sesiones basada en SQL Server.
[![Ninguno][nedb-session-store-image] nedb-session-store][nedb-session-store-url] Una tienda de sesiones alternativa basada en NeDB (ya sea en memoria o en archivo persistente).
[![Ninguno][@quixo3/prisma-session-store-image] @quixo3/prisma-session-store][@quixo3/prisma-session-store-url] Una tienda de sesiones para el Marco de Prisma.
[![Ninguno][restsession-image] descanso][restsession-url] Almacenar sesiones utilizando una API RESTful
[![Ninguno][sequelstore-connect-image] sequelstore-connect][sequelstore-connect-url] Una tienda de sesiones con Sequelize.js.
[![Ninguno][session-file-store-image] session-file-store][session-file-store-url] Una tienda de sesiones basada en el sistema de archivos.
[![Ninguno][session-pouchdb-store-image] session-pouchdb-store][session-pouchdb-store-url] Tienda de sesiones para PouchDB / CouchDB. Acepta la instancia incorporada, personalizada o remota de PouchDB y sincronización en tiempo real.
[![][@cyclic.sh/session-store-image] @cyclic.sh/session-store][@cyclic.sh/session-store-url] Una tienda de sesiones basada en DynamoDB para Cyclic.sh aplicaciones.
![][@databasunker/session-store-image] @databasunker/session-store Una Databunkertienda de sesiones cifradas.
[![★][sessionstore-image] sessionstore][sessionstore-url] A session store that works with various databases.
[![Ninguno][tch-nedb-session-image] tch-nedb-session][tch-nedb-session-url] Una tienda de sesiones del sistema de archivos basada en NeDB.
Ejemplos
Ver contador
Un ejemplo simple usando express-session para almacenar las vistas de página para un usuario.
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);Usuario
Un ejemplo simple usando express-session para mantener un registro de usuario en sesión.
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);Depuración
Este módulo utiliza el módulo debug internamente para registrar información sobre las operaciones de sesión.
Para ver todos los registros internos, establece la variable de entorno DEBUG a
express-session al ejecutar tu aplicación (npm start, en este ejemplo):
$ DEBUG=express-session npm startEn Windows, use el comando correspondiente;
> set DEBUG=express-session & npm start