Cookies entre dominios
Tengo dos aplicaciones web WebApp1 y WebApp2 en dos dominios diferentes.
- Estoy configurando una cookie en WebApp1 en HttpResponse.
- ¿Cómo leer la misma cookie de HttpRequest en WebApp2?
Sé que suena extraño porque las cookies son específicas de un dominio determinado y no podemos acceder a ellas desde diferentes dominios; Sin embargo, he oído hablar de las cookies CROSS-DOMAIN que se pueden compartir entre varias aplicaciones web. ¿Cómo implementar este requisito utilizando cookies CROSS-DOMAIN?
Nota: estoy intentando esto con aplicaciones web J2EE
Sí, es absolutamente posible obtener la cookie domain1.example
mediante domain2.example
. Tuve el mismo problema con un complemento social de mi red social y después de un día de investigación encontré la solución.
Primero, en el lado del servidor necesitas tener los siguientes encabezados:
header("Access-Control-Allow-Origin: http://origin.domain:port");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type, *");
Dentro del archivo PHP puedes usar$_COOKIE[name]
En segundo lugar, del lado del cliente:
Dentro de su solicitud AJAX debe incluir 2 parámetros
crossDomain: true
xhrFields: { withCredentials: true }
Ejemplo:
type: "get",
url: link,
crossDomain: true,
dataType: 'json',
xhrFields: {
withCredentials: true
}
Como dicen otras personas, no puedes compartir cookies, pero podrías hacer algo como esto:
- centralizar todas las cookies en un único dominio, digamos
cookiemaker.example
- cuando el usuario te hace una solicitud,
example.com
redirigelo acookiemaker.example
cookiemaker.example
lo redirige nuevamenteexample.com
con la información que necesita
Por supuesto, no es completamente seguro y debes crear algún tipo de protocolo interno entre tus aplicaciones para hacerlo.
Por último, sería muy molesto para el usuario si hiciera algo así en cada solicitud, pero no si es solo la primera.
Pero creo que no hay otra manera.
Hasta donde yo sé, las cookies están limitadas por la política de "mismo origen". Sin embargo, con CORS puede recibir y utilizar las cookies del "Servidor B" para establecer una sesión persistente desde el "Servidor A" en el "Servidor B".
Aunque esto requiere algunos encabezados en el "Servidor B":
Access-Control-Allow-Origin: http://server-a.example.com
Access-Control-Allow-Credentials: true
Y deberá enviar el indicador " withCredentials " en todas las solicitudes del "Servidor A" (por ejemplo xhr.withCredentials = true;
:)
Usted puede leer sobre ello aquí:
http://www.html5rocks.com/en/tutorials/cors/
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
No existen las cookies entre dominios. Puede compartir una cookie entre foo.example.com
y, bar.example.com
pero nunca entre example.com
y example2.com
, por razones de seguridad.