Cookies de dominios cruzados


Tengo un pequeño problema.

¿Cómo configuro una cookie para varios dominios?

Entiendo los problemas de seguridad, y estoy seguro de que se ha hecho antes. La razón de esto es SSO.

Ie.

account.domain.com tendrá que establecer el dominio conectado para:

Domain.com, domain1.com, domain2.com.

¿Hay alguna manera fácil, usando PHP y cookies, o alguna alternativa?

Author: Cloud, 2009-07-05

4 answers

No hay absolutamente ninguna manera de domain.com para configurar una cookie para domain1.com. Lo que está intentando hacer solo se puede resolver haciendo que el navegador del usuario envíe solicitudes a cada dominio, que luego establecerá su propia cookie.

Entonces necesita una forma para que cada dominio verifique la identidad del usuario. Hay dos enfoques para esto:

  1. Back channel - los sitios se contactan entre sí directamente para determinar si un usuario ha iniciado sesión.
  2. Pasar un token en el GET o POST - cuando el explorador del usuario se redirige al otro sitio, se pasa un parámetro firmado digitalmente que contiene la identidad y el estado de la sesión.

Es realmente bastante complicado. Te sugiero que no hagas el tuyo. Echa un vistazo a SimpleSAMLphp para una implementación PHP de lo que estoy describiendo.

 28
Author: Andrew Strong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-08 02:44:43

Lo que estás intentando no se puede hacer. (Es un problema de seguridad del navegador, no uno PHP.)

Aparte de usar alguna forma de autenticación fuera del sitio, lo más cercano que puede lograr es hacer que una cookie sea accesible a través de subdominios, en cuyo caso solo usa el arg 'domain' opcional de la función set_cookie de PHP.

 6
Author: John Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-05 16:30:46

Esto se puede hacer a través de un dominio que actúa como un maestro y otros como un esclavo.

Digamos que tenemos un dominio accounts.domain.com y es nuestro maestro.

Entonces tenemos nuestros esclavos domain.com, something.com y another.com

Cuándo iniciarás sesión domain.com, será realmente sitio accounts.domain.com, entonces obtendrá una cookie con ID único para su navegador y luego será redirigido a domain.com ' s post-logon landing page (ie. domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>). la página de destino se pondrá en contacto con el accounts.domain.com, consultándolo con el ID del navegador. Si la transacción está bien, entonces obtendrá la cookie de inicio de sesión de domain.com.

El Siguiente, en cada dominio (domain.com, something.com y another.com) serán inicial redirigir a accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>. Debido a que estamos regresando a casa (ya estamos conectados accounts.domain.com), seremos redirigidos nuevamente a nuestra página de destino (<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>) y desde este punto es lo mismo que la parte con el inicio de sesión. Nos desplazamos sin problemas a otro dominio (sin que el usuario lo sepa, ya que los navegadores generalmente no muestran la página redirigida hasta que pasado los encabezados enviar(servidor)/recibir (navegador) sección).

En caso de que de hecho no haya un inicio de sesión activo, el sitio guardará este "inicio de sesión negativo" en la sesión y no intentará verificar el inicio de sesión más (hasta que intentemos iniciar sesión o cargar otro dominio).

 5
Author: lmojzis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 16:21:57

Creo que esta solución se adaptará a sus necesidades: " Simple Single Sign-On for PHP "

 3
Author: merkuro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-05 21:59:11