2011-02-05 15 views
7

Quiero crear una cookie desde un dominio una vez que el usuario está registrado en PHP. y haga que esta cookie sea accesible para otros 4 dominios, no para el subdominio. Sé que las cookies no están diseñadas para ser accesibles para otros dominios. Por ejemplo, he establecido una variable de cookies $ user_email desde el dominio www.firstdomain.com y quiero acceder a ella en otros dominios, como www.seconddomain.com, www.thirddomain.com, etc. Puede que esto se pueda hacer mediante PHP o JavaScript. Alguna idea, por favor.PHP Cookies para dominios múltiples

¡Gracias!

Respuesta

6

Como ya se ha dicho, una cookie solo se puede establecer para un dominio de ese dominio (incluidos sus subdominios). Y si sus dominios no comparten un superdominio común, debe configurar cada cookie para cada dominio por separado.

Puede hacer esto con un script que en cada dominio establece la cookie para usted. Pero asegúrese de autenticar las solicitudes a estos scripts para que solo usted pueda establecer las cookies.

+0

Creo que este artículo se explica de forma sucinta: http://www.codeguru.com/csharp/csharp/cs_internet/article.php/c19417/Sharing-Cookies-Across-Domains.htm – peteski

1

Había resuelto exactamente el mismo problema (en realidad también para 4 dominios). La única solución que se me ocurrió fue incluir 3 iframes ocultos en la "página de inicio de sesión exitosa" y esos iframes solo cargan www.domain1.com/register_session.php, www.domain2.com/register_session.php, etc. ...

Como parámetro para register_session.php utilizo 'SID' que contiene el ID de sesión:

session_id($_GET['sid']); 
session_start(); 

Esto es en realidad para mantener viva la sesión en todos los dominios, pero la misma sería para su caso con galletas

+0

Como alternativa, puede hacer una solicitud AJAX de origen cruzado a través de [CORS] (http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross -origin-resource-sharing /) para pasar la información a través de dominios. –

9

Al buscar en la lista de cookies para galletas válidos, una comparación de los atributos de dominio de la cookie es hecho con el nombre de dominio de Internet de host desde el cual la dirección URL será descabellada. Si hay una coincidencia de cola, , entonces la cookie irá por la ruta haciendo coincidir para ver si debe enviarse. "Coincidencia de cola" significa que el atributo de dominio se compara con el de cola del nombre de dominio completo de del host. Un atributo de dominio de "acme.com" coincidiría con los nombres de host "anvil.acme.com" y "shipping.crate.acme.com". Solo los hosts dentro del dominio especificado pueden establecer una cookie para un dominio y los dominios deben tener al menos dos (2) o tres (3) períodos en ellos para evitar dominios de en el formulario: ".com", ". edu "y" va.us ". Cualquier dominio que falle dentro de uno de los siete dominios especiales de nivel superior que se enumeran a continuación solo requieren dos períodos. Cualquier otro dominio requiere al menos tres. Los siete dominios especiales de nivel superior son: "COM", "EDU", "NET", "ORG", "GOV", "MIL" e "INT".

El valor predeterminado de dominio es el nombre de host del servidor que generó la respuesta de cookie.

leer here.

puede cargar un iframe desde un host que luego se recarga con el valor de cookie codificado en la parte del segmento (después del #).

a continuación, puede acceder al atributo document.location desde la ventana principal (se accede a la única opción accesible). decodifícalo y pásalo a tu servidor haciendo una solicitud ajax.

Esto podría verse así.

xss.php (ubicado en cookies.example.com):

<?php 
$data = array(
'uid' => $_COOKIE['uid'], 
'loginhash' => $_COOKIE['loginhash']); 
header('Location: xss.php#'.urlencode(json_encode($data))); 

¡Para este caso particular no es necesario que sea el hashtag! es simplemente conveniente para otras situaciones. esto también se puede hacer en javascript.

otro sitio web incrusta xss.php:

<iframe id="cookies" src="http://cookies.example.com/xss.php"></iframe> 

you need to somehow delay the following of do it in a loop that stops after 5 seconds or something. 

if(document.getElementById('cookies').location != 'http://cookies.example.com/xss.php') { 
// read location, extract hashtag, json decode using javscript, there you have your user. send it to server for validation or whatever. 
} 

este teqnique se llama recieving XSS. es, por ejemplo, utilizado por Facebook para todas sus bibliotecas javascript connect.

una forma probablemente mejor sería algún tipo de protocolo de intercambio simbólico como openid.

amazon utiliza esto también.

puede configurar un proveedor de apertura (hay bibliotecas disponibles que pueden hacerlo de la caja) y configurarlo para redirigir de forma automática sin interacción del usuario. A menudo he visto que el protocolo openid se usa para otros fines, al igual que la comunicación entre dominios.

+0

¿Podría editar su respuesta (tal vez dar un ejemplo de código de muestra) para que pueda volver a subirlo? Accidentalmente deshice mi voto. –

+0

viene directamente. –

+0

Creo que se puede hacer de una manera más elegante, pero el principio sigue siendo el mismo –

0

si desea acceder a la galleta dentro de los diferentes dominios de modo esto se puede hacer con la ayuda de JavaScript truco. Como se puede acceder a la cookie dentro del mismo dominio.

  1. Crea cookies en el navegador del usuario usando JavaScript en tu primer dominio.

  2. Establezca el nombre de la ventana para cualquier valor de cookie que desee transportar a otro dominio utilizando window.name.

  3. El paso 2 debe realizarse en cada página del dominio que ha creado la cookie. Podría ser fácil llamando a un archivo JavaScript en todas las páginas.

  4. Cuando te mudas a otro dominio y quieres acceder al valor de cookie mencionado anteriormente, accediendo usando window.name como no ha cambiado.

  5. Crea una nueva cookie en este dominio y asignale este valor.

Cuestiones relacionadas