Sesiones de dominios cruzados: dominios cruzados de carrito de compras compartidas

estamos solucionando el problema con eshop (php, mysql). El cliente desea tener la misma eshop en dos dominios con carrito de compras compartido. En la tienda, el cliente puede hacer las compras sin la cuenta de los usuarios (no puede iniciar sesión). Y está el problema, cómo hacer que el carrito de compras compartido sea de dominio cruzado.

Los datos del carro se almacenan en sesiones, que también almacenamos en la base de datos. Pero no podemos resolver el problema al transportar datos sobre dominios. La identificación del usuario no registrado no es a prueba de huecos ( investigación ).

El ejemplo, cómo debería funcionar

El cliente va a domainOne y agrega algunas cosas al carrito. Luego va a domainTwo (por enlace, escribiendo la dirección del dominio, sin embargo) y agrega algunas otras cosas al carrito. En el carrito, tiene cosas de ambos dominios (después de actualizar la página).

¿Tienes alguna idea de cómo resolver este problema?

Lo que no funcionó:

  • la redirección no es posible debido a los requisitos del cliente
  • las cookies están relacionadas con el dominio
  • set_cookie con el otro dominio no funcionó
  • la forma más simple es transferir solo el sessionid (almacenado en cookies) pero no sabemos cómo identificar completamente a los usuarios no registrados.
  • ¿Hay algún otro lugar donde los datos puedan almacenarse en el lado del cliente, excepto las cookies? (Probablemente no)
  • no podemos usar el envío de sessionid por params en url (si el usuario hace clic para vincular al otro dominio) o resolver el refereador del encabezado, porque no sabemos cómo el usuario puede lograr el otro dominio.

Si no puedes entenderme, hazme una pregunta. Si crees que tener eshop en dos dominios con carrito compartido (común) es una mala idea, no me digas, lo sabemos.

Gracias por cada respuesta.

Puede usar un tercer dominio para identificar a sus clientes en todos los dominios.

Utilice, por ejemplo, un archivo PHP en http://thirdDomain.com/session.php que se incluye en todas las páginas de ambas tiendas.

Muestra:

 

Después de que su cliente cambie de dominio, puede identificarlo como el mismo cliente que utiliza el tercer dominio.

Puede asignar la identificación de la sesión en ambas tiendas a la identificación de la sesión en el tercer dominio para acceder al carrito en ambas tiendas. Solo necesita informar el tercer dominio sobre las sesiones de su tienda (es decir, agregarlas como parámetro).

Dependiendo de cuán flexible sea con su código y sus plantillas, incluso puede usar un resultado del tercer dominio para definir la identificación de la sesión en sus tiendas. De esta forma puede usar el mismo ID de sesión en todos los dominios. Pero normalmente una asignación de identificación de sesión debe ser la forma más segura.

Usando la versión de javascript, también puede generar scripts que pueden agregar una identificación de sesión a todos los enlaces y formularios salientes al otro dominio en la página html actual. Esto podría ser interesante si puede identificar a su cliente con cookies bloqueadas. También puede usar el javascript para informar el documento principal sobre una sesión existente.

Esto sigue siendo preguntado.

Haga una búsqueda de SSO.

Debe pasar la identificación de la sesión en la URL (o en una POST) a través de los dominios, luego:

1) comprobar que la sesión no existe en el dominio de destino

2) vuelva a enlazar la sesión usando el ID de sesión enviado

p.ej

 if ((!$_COOKIE[session_name()]) && $_GET['passed_id']) { if (check_session_exists($_GET['passed_id'])) { session_id($_GET['passed_id']); } } session_start(); ... function check_session_exists($id) { $path=session_save_path() . $id; if (file_exists($path) && (time()-filemtime($path) 

Esto también significa que debe agregar '? Passed_id ='. urlencode (session_id ()) a cualquier URL que apunta al otro dominio.

DO.

El esquema es bastante simple y ampliamente utilizado. Por google para sus numerosos servicios, por ejemplo. Usted tiene una imagen completa rastreando el intercambio HTTP entre su navegador y varios servicios de google para obtener la idea.

Supongamos que tenemos nuestro cliente autorizado para el primer dominio. Al llegar al segundo, tenemos que:

  1. inicia una sesión y almacena algún token en ella.
  2. Pídale al navegador que solicite el primer dominio de alguna manera y envíe este token.
  3. El primer dominio reconocerá a nuestro cliente y hará una conexión en la base de datos compartida entre este token y el ID de usuario.
  4. Al solicitar nuevamente el segundo dominio, lo tendremos autorizado para su sesión ya iniciada.

La única pregunta que queda es cómo solicitar el primer dominio. Puede ser una imagen o una solicitud de JS o redireccionar toda la página. Cierta elección depende de usted.

Puedes usar Flash LSO para este asunto, creo. Normalmente los LSO se almacenan en sus entornos limitados específicos del dominio, pero si dos objetos de dominio lo permiten, se pueden comunicar como se indica en la sección de “comunicación entre películas” en http://download.macromedia.com/pub/flash/whitepapers/security. pdf . Para información general sobre LSO: http://www.adobe.com/products/flashplayer/articles/lso/

SSO.

CartA tiene un iframe que 1) comprueba si el usuario está “activo” (tiene sesión) 2) crea una sesión nueva. CartB tiene un iframe que hace 1) o 2)

iframe carga del dominio de SSO (cualquier dominio que pueda tener)

Solución SSO: comstack el tuyo o usa otros, como simplesamlphp o algo así …

Y no debería haber necesidad de aprobar sesiones / params con URI …

Puede almacenar datos en lugares distintos a las cookies (por ejemplo, Flash cookies, localStorage ) pero todos usan la misma política de origen, que es el modelo de seguridad estándar de la web: solo los dominios almacenados por ese dominio y sus subdominios pueden acceder. La solución estándar es insertar un iframe del dominio externo en la página. Ese iframe tendrá acceso a las cookies del dominio externo, y su url será controlado por el dominio local, que permite la comunicación.

Una solución simple basada en eso es tener una tabla de pares (sessionA de domainA, sessionid de domainB). Cuando un nuevo usuario llega a domainA, (nuevo sessionid, NULL) se agrega a la tabla; la página que se le muestra incluye un iframe invisible con source = http://domainB/mergeSessions.php?sessionA=1234 . mergeSessions.php recibirá sessionA como un parámetro de URL y sessionB como una cookie, y actualizará la tabla de enlace de la sesión en consecuencia.

Podría intentar identificar a sus visitantes por IP, tipo de navegador, versión del navegador, sistema operativo, resolución de pantalla y cualquier otra cosa que se le ocurra. Que almacene en la base de datos compartida cuando alguien accede a cualquiera de los sitios.

Si, dentro de una ventana de tiempo pequeña, digamos <5 min, las solicitudes de esa IP con esos parámetros provienen, puede suponer razonablemente que es el mismo usuario. De nuevo, asegúrese de utilizar todo lo que encuentre para identificar a ese usuario y de ninguna manera basar nada seguro en esto o estará sujeto a secuestro.

¿Qué tal algo como esto? No estoy seguro de lo bueno que sería.

El usuario va a store1. Si el usuario no tiene una cookie de sesión, redirija a una página especial en store2 solicitando la identificación de la sesión y enviando la url en store1 para regresar. La página especial mira la cookie de sesión y redirige a la url original en store1 con la identificación de la sesión (como la respuesta de @symcbean). Luego, en store1, la cookie de sesión se establece (o se crea nueva) y no se produce ninguna redirección. Y luego lo mismo pero opuesto si el usuario está en store2 sin cookie de sesión.

Pero si el usuario no tiene las cookies habilitadas, puedo ver un ciclo infinito sucediendo. No estoy seguro si sería posible detectar y detener de alguna manera.

Pero de esta manera sería hacky en el mejor de los casos.

1) Obviamente, use el mismo almacén de sesión para ambos dominios (archivos, base de datos, memcached, los sospechosos habituales).
2) Si después de session_start () el $ _SESSION está vacío, cree una matriz de ‘todos los dominios’ en la sesión (haga esto en cada dominio, independientemente de cuál sea).

 $_SESSION['all_domains'] = array( 'domain1.com' => true, //<= current domain the customer is on, 'domain2.com' => false, //other domain, no cookie for it yet. 'domain2.com' => false); //repeat for all domains needed 

3) Cree una secuencia de comandos set-sesión en todos los dominios (vamos a llamarlo ‘sesset.php’:

   

4) En cada página HTML de php concebible, pon esto en algún lugar cerca del final del cuerpo:

   $domainset){ if(!$domainset){ echo ''; } } ?> 

No a prueba completa, pero obtendrá casi todos los usuarios. Por supuesto, uno podría hacerlo con una cascada de redirección en lugar de ‘imágenes ocultas’, pero los robots de búsqueda (google y otros) se confunden mucho, especialmente si no recuerdan la cookie y se quedan atrapados siendo redirigidos una y otra vez.

easyXDM es un marco que permite al usuario trabajar fácilmente en torno a la política de Same Origin. Su característica RPC incorporada es muy fácil de usar, y deberías estar listo para funcionar en poco tiempo.

Para su caso, seleccione uno de los dominios para ser el dominio de “pago y envío” (A): este es el dominio que mantendrá la sesión almacenada. En el mismo dominio, crea un archivo pequeño con un extremo de easyXDM que es responsable de almacenar / recuperar los datos enviados desde el otro dominio (B).

Ahora, en el dominio B, incluye easyXDM y cuando almacena / recupera datos del carrito, accede a los métodos RPC.

Opción 1 Usar Iframes:

  • El sitio 1 tiene un iframe del sitio 2
  • El sitio 2 tiene un iframe del sitio 1

Cuando un usuario selecciona un elemento del sitio uno, establezca el valor iframe en una cadena dinámica, es decir, domain2.com/iframe.php?itemid=someitem.

Haga que domain2 tome la información $ _GET con PHP del iframe y actualice la cookie del usuario.

Haz lo mismo en la otra dirección.

Opción 2: Javascript incluye

Puede hacer algo similar con los archivos JS incluidos entre sitios generados por PHP para “extraer” los contenidos de las cookies del usuario al otro sitio.

Opción 3: Curl

Simplemente publique los datos de un dominio a otro, de modo que ambos tengan una copia. Este es el método menos seguro ya que no hay garantía de que la dirección IP u otros datos de identificación no puedan duplicarse. Sin embargo, puede tener alguna “pregunta” o frase de contraseña para asegurarse de que sea la misma persona. ¿Posiblemente estableciendo una dirección de correo electrónico?

Opción 4: cookies de terceros

Creo que este ya fue mencionado, pero puede establecer las cookies desde un tercer dominio, por lo que ambos sitios funcionan exactamente igual en lugar de “alternar” entre los dos.