Cookies: configuradas en múltiples dominios

6 minutos de lectura

avatar de usuario
clarkeychico

Mi empresa tiene una configuración de la siguiente manera:

  • subdominio1.dominio1.com
  • subdominio2.dominio1.com
  • subdominio3.dominio1.com
  • subdominio4.dominio1.com
  • subdominio5.dominio1.com
  • subdominio6.dominio1.com

  • subdominio1.dominio2.com

  • subdominio2.dominio2.com
  • subdominio3.dominio2.com
  • subdominio4.dominio2.com
  • subdominio5.dominio2.com
  • subdominio6.dominio2.com

En cada sitio, teniendo en cuenta que puede haber cien sitios por subdominio, los usuarios pueden iniciar sesión. Nosotros, como desarrolladores, tenemos que probar las interfaces en varios navegadores, pero es posible que solo se requiera algo de trabajo en una sección una vez que haya iniciado sesión.

He escrito un script de usuario que nos permite guardar un nombre de usuario y una contraseña (y otros detalles que no puedo mencionar por motivos de confidencialidad). El script verifica si la cuenta de usuario existe completando el formulario de inicio de sesión y haciendo clic en el botón Enviar. Si no, se registra para nosotros, automatizando así el proceso de registro.

Compartir cookies entre subdominios en el mismo dominio es fácil. Si estoy en subdominio1.dominio1.com, puedo guardar una cookie que subdominio2.dominio1.com puede recuperar. Sin embargo, también me gustaría guardarlos para el dominio2. Parece que no puedo hacer que esto funcione.

Puedo ver dos soluciones desde aquí, ya sea:

1) adjunte un iFrame usando el script de usuario, que carga un sitio en el dominio2. Esto luego usa la cadena de consulta para decidir qué establecer en qué, o;

2) use un formulario con method=”POST”, y simplemente publíquelo en un archivo en cada dominio.

Cualquiera de las dos formas requerirá muchos recursos, especialmente si las cookies se actualizan cada vez que cambia una cookie. También contamos con enmascaramiento de URL. Entonces, también tendríamos que tener en cuenta sitios como abc.clientdomain1.com, abc.clientdomain2.com, etc.

¿Alguien sabe de una manera más fácil de lograr esto?

avatar de usuario
Subín

Esta respuesta es una versión ligeramente diferente de mi respuesta a la pregunta “Establecer cookies en múltiples dominios con PHP o JavaScript”.

Haz lo que Google está haciendo. Crear un PHP (o cualquier otro archivo de idioma del servidor) que establece la cookie en los 3 dominios. Luego, en el dominio donde se establecerá el inicio de sesión, cree un HTML archivo que cargaría el PHP archivo que establece cookies en los otros 2 dominios. Ejemplo:

<html>
 <head></head>
 <body>
 Please wait..........
 <img src="http://domain2.com/setcookie.php?user=encryptedusername"/>
 <img src="http://domain3.com/setcookie.php?user=encryptedusername"/>
 </body>
</html>

Luego agrega un cargar devolución de llamada en cuerpo etiqueta. El documento solo se cargará cuando las imágenes se carguen por completo, es decir, cuando se establezcan cookies en los otros 2 dominios. Carga de devolución de llamada:

<head>
 <script>
 function loadComplete(){
  window.location="http://domain1.com";//URL of domain1
 }
 </script>
</head>
<body onload="loadComplete()">

Ahora las cookies están configuradas en el Tres dominios

Fuente

  • ¿Cómo puedo saber que Google está haciendo esto?

    – chanchal118

    31 de mayo de 2016 a las 11:41

  • @ chanchal118 Inspeccione la página con herramientas de desarrollador mientras inicia sesión en su cuenta de Google

    – Subín

    9 de septiembre de 2017 a las 19:06

  • Hola Subin, ¿qué problema está tratando de resolver Google, o qué propósito intenta lograr al usar esta técnica?

    – Amigo tonto

    2 de julio de 2020 a las 6:53

  • @SillyDude Cuando el usuario inicia sesión en Google, iniciará sesión con el mismo usuario en dominios que no sean .google.com, como youtube.com. Creo que todavía usan esto, lo encontraron en la fuente de la página mientras iniciaban sesión en Google iirc

    – Subín

    2 de julio de 2020 a las 15:52

Cree un dominio común específicamente para sus cookies y utilícelo como una API de obtención/establecimiento.

http://cookie.domain.com/set/domain1
http://cookie.domain.com/get/domain1

http://cookie.domain.com/set/domain2
http://cookie.domain.com/get/domain2

y así.

  • Esto suena como si funcionaría, no estoy seguro de si hacerlo o si un formulario sería más simple de implementar, sobre la base de que pretendo terminar esto dentro de una semana.

    – ClarkeyBoy

    7 de diciembre de 2011 a las 21:08

  • Sé que esto es muy antiguo, pero ¿podría dar más detalles sobre esta respuesta? ¿Como funciona?

    – skaldesh

    19 de julio de 2018 a las 9:28

  • @BastiSkaldendudler simplemente elimina la URL del navegador de la política de cookies para que el navegador solo sepa sobre cookie.domain.com al tratar con las cookies. Básicamente, acérquese como lo haría con una red de marketing publicitario en la que desea que se realice un seguimiento de las cookies compartidas en todos los dominios.

    – AlienWebguy

    21 de julio de 2018 a las 21:57

avatar de usuario
jonathan rico

Incluya una etiqueta de secuencia de comandos de domain2 que establezca la cookie con un nombre de usuario y una contraseña cifrada:

<script type="text/javascript" src="http://domain2.com/cookie_login_page.php?username=johnsmith&hash=1614aasdfgh213g"></script>

Luego puede verificar para asegurarse de que las contraseñas codificadas coincidan (una forma).

Puntos clave:

  1. Haga que los valores hash en la URL sean sensibles al tiempo agregando una marca de tiempo que será acordada por el servidor (por ejemplo, 16:00, 16:10, etc.) antes de codificar la cadena. Si está utilizando HTTPS, este es un problema menor.

  2. Si sus contraseñas ya están codificadas, no le hará daño duplicar las contraseñas, suponiendo que las sales sean las mismas en ambos servidores.

Ejemplo de código PHP:

origen:

<script type="text/javascript" src="https://stackoverflow.com/cookie_login_page.php?username=<?php echo $username; ?>&hash=<?php echo md5($password . date("H')); ?>"></script>

destino:

<?php 

$password = get_password($_GET['username']);
if($_GET['hash'] == md5($password . date('H')) {
    // set the cookie
}

  • Esto está tan mal de muchas maneras. 1) Si tiene un punto final que consume una contraseña de doble hash y un script php para generar una sola contraseña hash, entonces no es mejor que mantener las contraseñas sin hash. Incluso si se filtra la base de datos de contraseñas con hash único, el punto final que consume hash doble seguirá siendo utilizable. 2) Esencialmente, está solicitando que el usuario vuelva a iniciar sesión en un punto final diferente usando un <script> solicitud GET basada en etiquetas

    – Hritik

    10 de noviembre de 2021 a las 6:12


Por razones de seguridad, los sitios no pueden establecer ni recuperar cookies en otros dominios. La creación de secuencias de comandos para enviar el formulario a través de javascript es probablemente la más fácil de hacer, y aún almacenará las cookies que necesita en la memoria caché del navegador.

Como han dicho otros, no puede acceder a las cookies en todos los dominios. Sin embargo, si tiene el control del código del servidor, puede devolver información en el cuerpo y permitir que su cliente lea y almacene esa información por servidor.

En mi caso, estoy conectando un solo cliente a varios servidores, manteniendo una conexión autenticada con cada uno. Necesito saber cuándo expirará la sesión de cada uno, por lo que el servicio de autenticación devuelve la cookie, además modifica el cuerpo de la respuesta para enviar de vuelta los datos relevantes, de modo que pueda leer esos datos y configurar mis propias cookies. .

Al hacer esto, puedo rastrear manualmente lo que necesito. No funcionará en todos los escenarios, pero podría funcionar para algunos como yo.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad