Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Compartir ID de sesión entre Express.js y Socket.io bajo un iframe de origen diferente

Tengo un problema con mi aplicación Node que usa Express.js, Socket.io y ambos comparten el mismo ID de sesión. Si abro mi sitio web sin iframe o iframe con los mismos orígenes, funciona perfectamente bien (el mismo ID de sesión se comparte entre HTTP y Socket.io). Sin embargo, la ID de sesión compartida entre Express.js y Socket.io no funciona cuando se ejecuta bajo iframe con diferentes orígenes (principal y secundario). No veo la cookie configurada en el navegador Chrome en las herramientas de desarrollo.

Ambos orígenes son sitios web HTTP no seguros (p. ej., de http://ip.ad.dr.ess/ (principal) a http://ip.ad.dr.ess:6175/ (secundario)). Accedo a mi sitio web directamente sin pasar por ningún servidor web porque publico mi backend de nodo con este puerto 6175.

Aquí está el código de muestra:

Configurar sesión express:

 const sessionMiddleware = session({ resave: true, saveUninitialized: true, secret: config.session.secretKey, httpOnly: true, // dont let browser javascript access cookie ever ephemeral: true, // delete this cookie while browser close cookie: { maxAge: config.session.maxAge, secure: false, sameSite: "none", path: "/" }, store: new (FileStore(session))({ logFn: logger.info, reapInterval: config.session.reapInterval, }) }); app.use(sessionMiddleware);

Configure middleware adicional para Express.js:

 app.use(cors()); app.options('*', cors()); app.use(helmet({ frameguard: false })); app.use(compression()); app.use(bodyParser.json()); app.use(cookieParser());

Configure Socket.io con el paquete de sesión expresa:

 this.io = new Server(server, { cors: { origin: '*', methods: ["GET", "POST", "PUT", "DELETE"], }, }); this.socket.io.use((socket, next) => { sessionMiddleware(socket.handshake, {}, next); });
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema se solucionó en el navegador Chrome pero no en Safari, por lo que es posible que deba trabajar con la URL agregándola con la ID de sesión y obtenerla en el servidor. En el servidor Node, configuré solo maxAge en el objeto de cookie de la sesión rápida y ambos orígenes deben ser un sitio web HTTP seguro para que funcione. Siga este enlace para solucionarlo en el navegador Chrome: https://serverfault.com/questions/1010706/setup-samesite-none-value-in-nginx-webserver

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda