2012-09-11 34 views
8

He creado un sitio web (A) que inicia sesión y recupera datos de clientes de un servicio web por separado.Compartir una cookie entre dos sitios web

La organización que posee (A) también tiene un sitio web (B) que tiene un formulario web. Quieren que un usuario conectado en (A) pueda hacer clic en (B) y ver un formulario rellenado previamente con sus detalles.

Esto significa que (A) debe escribir su ID de cliente en una cookie, que (B) puede leer, y luego (B) puede solicitar los datos del servicio web y rellenar previamente el formulario.

Esto plantea dos cuestiones:

  1. puede Web site (B) leer la cookie de sitio web (A)?

  2. Si es así, para evitar que alguien edite una cookie y vea los datos de otras personas en el formulario, tendría que hacer algo como encriptar la cookie en (A) y luego descifrarla en (B) - cualquier sugerencia a lo largo de esta línea?

que no puedo cambiar el nombre de usuario existente a OAuth o algo así, ya que el servicio web es consumido por varios otros sitios, por lo que no se puede cambiar.

Respuesta

12

Nº Sitio B no puede leer una cookie de la página web A.

La más fácil solución alternativa es pasar de usuario/información de credenciales desde el sitio web de A a B y tienen página web sitio web de B establece una cookie separada. Por ejemplo, después de iniciar sesión en el sitio web A, puede redirigirlos rápidamente al sitio web B con una cadena de cifrado. El sitio web B podría leer la información, establecer su propia cookie y redirigir al usuario al sitio A.

Es complicado pero posible.

+0

Gracias Chris. El problema es que no existe una "acción del usuario" que indique que desean pasar de A a B. Ingresan a A, realizan alguna actividad, luego pueden navegar a B en algún momento, no a través de un enlace en el sitio A. Es posible tener los dos sitios en el mismo dominio, como los subdominios. ¿Eso lo haría una posibilidad? – Sean

+0

Si después del inicio de sesión puede redirigir al usuario rápidamente al sitio web B, establecer la cookie allí, y luego redirigirlos, podrían visitar el sitio web B en cualquier momento en el futuro (mientras persistía la cookie) y tener esa información disponible. –

+0

Disculpe, no vi el doble redireccionamiento en la primera lectura. Esto me da una opción, gracias. – Sean

0

Existen herramientas de código abierto en Internet que pueden hacer eso, pero esto va en contra de toda la idea detrás de la filosofía de las cookies. Las cookies están destinadas a ser accedidas por un solo dominio. Sin embargo, puede burlarse de ese dominio y 'Hackear' en el navegador. No se recomienda y algunos navegadores tienen una seguridad más estricta y no permiten eso.

Te sugiero que crees un servicio web en el sitio web A y leas el acceso de lectura a B para leerlo.

1

Las cookies solo son accesibles para un solo dominio al que están configuradas.

Creo que si utiliza dos subdominios en el mismo dominio sería posible compartir las cookies, sin embargo, el navegador no envía las cookies establecidas en un dominio a ninguna otra.

Editar: También desea evitar el almacenamiento de grandes cantidades de datos en una cookie. ¿Existe la posibilidad de que puedas crear una API que el sitio B pueda consultar con javascript?

8

Mencionó que la misma compañía posee ambos sitios. Como sospechaba, si los sitios tienen el mismo dominio, como www.mycompany.com y store.mycompany.com, entonces pueden compartir cookies. El encabezado de respuesta HTTP sería algo como esto:

Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com 

Dado que el cliente tiene acceso directo a estos datos, también debe incluir una firma para la manipulación sería detectado. Por lo general, todo está encriptado y firmado en un "token", que se configura como la cookie. Pero técnicamente, solo se requiere la firma.

3

Si en su caso todos sus usuarios usan navegadores con soporte HTML5, puede usar el método window.postMessage que permite addEventListener en un lado y postMessage en el otro. Aquí hay un buen artículo/ejemplo: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage.

A continuación, los pasos son simples:

  1. añadir al sitio A un iframe oculto al sitio B
  2. enviar la cookie de B a A usando window.postMessage
  3. tienda de la cookie recibida en la cookie de un
1

Posibles soluciones: Puede usar un marco en línea en el sitio secundario para mostrar el contenido del sitio primario (ocupando la ventana completa):

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>your page title</title> 
     <style type="text/css"> 
      body, html { 
      margin: 0; padding: 0; height: 100%; overflow: hidden; 
      } 
      #content { 
      position:absolute; left: 0; right: 0; bottom: 0; top: 0px; 
      } 
     </style> 
    </head> 
    <body> 
    <div id="content"> 
    <iframe width="100%" height="100%" frameborder="0" src="http://yourMainSite.com/dataDependentPage.php" ></iframe> 
    TESTING 
    </div> 
    </body> 
</html> 
Cuestiones relacionadas