Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

232
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda