¿Gestionar sesiones en Node.js? [cerrado]


100

¿Cuál es la mejor manera de administrar las variables de sesión en Node.js? ¿Hay biblioteca?

Respuestas:


95

Puedes hacerlo muy fácilmente usando:

Otra opción es utilizar marcos:

  • Express.js: http://expressjs.com/

    Parece ser el framework node.js más utilizado. Es como Sinatra para Ruby y corre encima de connect.

  • Geddy: http://geddyjs.org/

    Si quieres hacer WebApps más complejas, Geddy es la que eliges. Es como Rails for Ruby.


¿Qué ofrece geddy además de / over express? - ¿La misma diferencia que Sinatra y Rails?
— Michael

1

4
Creo que debería mencionar que Express está construido sobre Connect; cualquier característica o complemento que sea compatible con Connect funcionará con Express.
— Jonathan Dumaine



13

Simplemente descárguelo en Memcache o algún otro mecanismo de almacenamiento en caché. No cargaría a sus servidores con este tipo de cosas. ¿Cuál es el punto de un servidor web súper delgado que tiene que recordar cosas?

También trataría de desarrollar su sitio como una aplicación y no como un sitio web, o trataría su sitio web como una aplicación, usaría las maravillosas características de html5 como el almacenamiento local / bases de datos locales y reduciría la cantidad de tráfico entre el servidor y las máquinas cliente. .

Si todo lo demás falla (o el sitio es pequeño), entonces, ¿qué te impide escribir tu propia clase de sesión? No es tan difícil. Especialmente si es algo del tipo en memoria. Ponga un poco de lógica de temporizador para las sesiones de tiempo de espera y listo. Maldita sea, en un lenguaje dinámico como JavaScript, debería ser pan comido.

La estructura debe ser un diccionario en el que la clave sea la sesión y el valor un objeto que contenga detalles de la última comunicación y capacidades (para permitir el acceso a ciertas funciones). Agregue una función de barrido para borrar sesiones antiguas que han expirado. y bingo. Un servicio de sesión básico. una verificación básica en "es la clave de sesión en la lista ... sí / no ... obtener detalles" ... y creo que eso es todo ... o hay alguna característica que me falta.

Personalmente, evitaría cualquier herramienta de terceros durante el mayor tiempo posible. Las arenas del tiempo cambian muy rápido y siempre puede depender del código desarrollado por usted mismo.


16
Bueno, en mi experiencia, cada vez que agrega una nueva herramienta de terceros, se vincula a ese tercero por la esperanza de vida del producto que está desarrollando. Esto es malo, la falta de control y comprensión de la idea de un buen código de alguien que ha sido encuadrada en negro es muy difícil de manejar cuando algo sale mal (siempre sucede) en la mencionada caja negra. Encontrará muchas exenciones de responsabilidad adjuntas a los acuerdos de licencia de terceros, "use bajo su propio riesgo" es uno que veo a menudo. Las arenas del tiempo cambian rápidamente y solo porque alguien dice que el código es 1.0 ya no significa jack.
— WeNeedAnswers

6
Si puede programar el código usted mismo y, lo que es más importante, comprender el código, y el código se puede desarrollar en un período de tiempo razonable, ¿por qué utilizaría una herramienta de terceros? Y confío en todo el código que escribo mucho más que en un tercero. Soy ingeniero, no artista, construyo código que a veces se rompe pero nunca colapsa. No hay excusas para el código que no se ha probado. Con herramientas como pruebas de integración, pruebas unitarias, pruebas de regresión, ¿qué excusa usa para decir que su código no ha sido probado? Tenga más fe en sus talentos. Eres tan bueno como cualquier tercero.
— WeNeedAnswers

10
Hay tantos agujeros en su argumento que ni siquiera sé por dónde empezar. 1) Por qué utilizar una herramienta de terceros: para ahorrar tiempo y energía. 2) ¡Código abierto! = Sin marca. Express / Connect está hecho por equipos y su trabajo ha sido examinado por una gran comunidad. No son "un niño". 3) Reinventar las ruedas cuesta tiempo. Quizás tu tiempo sea gratis, la mayoría de la gente no lo es. 4) Nunca conocerá cada tornillo, perno y clip. Todo el software moderno se basa en marcos, simplemente hay demasiado para que una sola persona sepa cada detalle. Sinceramente, no creo que puedas ser un desarrollador profesional con estas opiniones.
— Kyeotic

6
Los marcos no son "soluciones mágicas". Cuando programa contra un Framework, permite que otra persona tome el control de las grandes decisiones sobre el código por usted. ¿Seguramente puedes ver eso? Es muy difícil volver sobre estas grandes decisiones una vez tomadas, si el Marco es demasiado amplio, entonces tomará todas las decisiones importantes por usted. El uso de Frameworks también oculta la programación real. Defina su interpretación de un marco, hay más de un tipo de marco. Algunos Frameworks están tan integrados al lenguaje de programación que yo llamaría a estos sistemas de programación.
— WeNeedAnswers

5
Nunca te insulté personalmente, dije que tu argumento tenía agujeros y luego los alineé. ¡Tú! = Tu argumento. Cuando dije que honestamente no creo que puedas ser un desarrollador profesional con estas opiniones, me refería al "tú" general, no específicamente. Sus opiniones sobre los marcos ignoran el hecho de que todo el software moderno los usa. Mantengo mi posición y esto no va a ninguna parte. Estoy de acuerdo con la respuesta aceptada de que usar Express / Connect es el camino correcto. De ahí mi defensa de Express.
— Kyeotic

6

La respuesta de Donald es buena: una vez que ingresa al patrón de cebolla del middleware de conexión, debe tomar una decisión sobre qué tipo de tienda de sesión usar. El predeterminado en Express es un MemoryStore y no está diseñado para uso en producción. Estas son algunas de sus opciones:

Mongo https://github.com/mikkel/express-session-mongo - Asegúrese de usar la opción 'native_parser: false'

Redis https://github.com/visionmedia/connect-redis : muy bien, pero si aún no está usando redis para pub / sub o almacenamiento, puede que no sea ideal.

Tenga en cuenta que hay otras opciones, depende de su proyecto. Busque algo que pueda introducir aprovechando su pila de tecnología existente.


3
Quiero centrarme en "El predeterminado en Express es un MemorySrote, y no está diseñado para uso de producción". Vaya a engineering.linkedin.com/nodejs/… y lea el punto 7.
— guiomie

4
Eso es interesante, entonces, ¿cómo administraría los permisos de usuario si no fuera manteniendo sesiones?
— Costa

2

Si está buscando un desarrollo web serio con Node.js, use Express framework ; admite sesiones.

Cree el proyecto Express con las opciones --sessions.

$ express --sessions

Para instalar Express:

$ npm install express -g

Ya no es compatible. Tienes que agregar cookie-sessiona tu package.josntrabajo.
— Victor Schröder
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.