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

229
Vistas
Colisión de cookies: ¿es posible distinguir entre el dominio principal y las cookies de subdominio en Django y Javascript?

He creado un montón de sitios web de Django en un solo dominio:

  • ejemplo.com
  • sitio1.ejemplo.com
  • sitio2.ejemplo.com
  • sitio3.ejemplo.com

Se supone que son completamente independientes , utilizados por diferentes personas para diferentes propósitos.

Sin embargo, Django da prioridad a las cookies configuradas por example.com , y los valores establecidos por site1.example.com , site2.example.com , etc. se ignoran si el dominio principal ha configurado una cookie con el mismo nombre.


Cómo funciona:

Cuando se carga la primera página, establece una cookie para que el servidor sepa enviar una página de computadora o una página móvil con la próxima solicitud.

El programa Django crea la versión correcta en función del valor de la cookie.

Cuando se carga site1.example.com , establece una cookie que solicita la versión móvil. Pero luego el programa Django ve el valor establecido por ejemplo.com e ignora la cookie correcta .

Por lo tanto, necesito una manera de hacer uno de los siguientes:

  1. evitar que site1.example.com lea la cookie de example.com
  2. diferencie en Django el dominio asociado con la cookie para que pueda decir que el valor es incorrecto
  3. encuentre una manera de establecer una cookie de dominio principal en Javascript que la haga inaccesible para los subdominios (no estoy usando www)

Si no puedo encontrar una solución elegante, probablemente terminaré cambiando el nombre de la cookie para que varíe con el nombre de dominio.

Sé que podría usar el marco de sesión , pero aparte de este problema en particular, todo funciona muy bien. Realmente me gustaría evitar modificar mi sistema existente, aunque obviamente lo haré si es necesario.

[actualización] Aquí está la función de configuración de cookies:

 function setCookie(cname, cvalue, exdays) { var domain = window.location.hostname; if (exdays > 7) exdays = 7; // max in Safari var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var name = cname + '=' + cvalue + '; '; var expy = 'expires=' + d.toUTCString(); + '; '; var domn = '; domain=' + domain + '; '; var path = 'path=/; '; var secu = 'samesite=lax; secure;'; var complete = name + expy + domn + path + secu; document.cookie = complete; }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Dado que dice que se supone que los sitios web son completamente independientes, la tercera solución que propone parece más sensata. No debe configurar cookies de tal manera que sean accesibles por subdominios. Actualmente está especificando el dominio en la cookie, debe omitir el dominio, lo que significaría que la cookie solo se enviaría para el dominio actual (al menos en los navegadores modernos, IE no sigue esta especificación). Si se especifica un dominio en la cookie, significa que la cookie también se usaría para los subdominios.

Como se menciona en RFC 6265 - sección 4.1.2.3 :

Si el servidor omite el atributo Dominio, el agente de usuario devolverá la cookie solo al servidor de origen.

Por lo tanto, su función de configuración de cookies debería ser como la siguiente:

 function setCookie(cname, cvalue, exdays) { // Domain should not be set unless cookie needs to be accessed by subdomains // var domain = window.location.hostname; if (exdays > 7) exdays = 7; // max in Safari var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var name = cname + '=' + cvalue + '; '; var expy = 'expires=' + d.toUTCString(); + '; '; // Domain should not be set unless cookie needs to be accessed by subdomains // var domn = '; domain=' + domain + '; '; var path = 'path=/; '; var secu = 'samesite=lax; secure;'; var complete = name + expy + path + secu; document.cookie = complete; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Como solución temporal, agregué un código a mi función setCookie :

 var domain = window.location.hostname; deleteParentCookieIfNecessary(name, domain);

deleteParentCookieIfNecessary contiene:

 function deleteParentCookieIfNecessary(name, domain){ var parts = domain.split('.'); if (parts.length > 2){ // on subdomain var domain = parts.slice(-2).join('.'); document.cookie = cname + '=;domain=.' + domain + ';path=/;max-age=0'; } }

El resultado es que cuando se establece la cookie , si la URL es un subdominio, la cookie del mismo nombre del dominio principal se eliminará automáticamente.

about 4 years ago · Juan Pablo Isaza 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