Compartir sesiones entre tiendas con diferentes dominios

8

Tengo tres sitios web en una instalación de Magento, cada uno tiene su propio dominio.

Ahora, debido a la seguridad del navegador web, no puede acceder a cookies de otro dominio, ni a sesiones.

De alguna manera, necesito poder pasar datos temporales entre dos tiendas diferentes con dominios diferentes.

Mi caso de uso específico:

Estoy usando GeoIP para activar una redirección a la tienda de países correcta, sin embargo, también necesito poder anular esto manualmente. Ahora, en este momento, tengo el problema de que estoy anulando manualmente en la tienda actual con una cookie, sin embargo, cuando soy redirigido a la otra tienda, no hay ninguna cookie en la otra tienda, por lo que retrocede y busca a los usuarios tienda basada en GeoIP. Sin embargo, esto crea un bucle infinito que redirige entre las tiendas.

Esto se hace averiguando el código del sitio web para la tienda que quiero usar index.phpcon un módulo personalizado y ejecutando Magento con el código correcto. Esto maneja todos los redireccionamientos, etc. para mí entonces.

lukefowell
fuente
¿Las vistas de su tienda están ubicadas en diferentes sitios web? Me refiero a sitios web en la terminología de Magento. En caso afirmativo, es posible que también deba leer este artículo, que explica cómo crear una extensión simple, que comparta el carrito de compras entre diferentes sitios web de Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Respuestas:

5

Puede compartir frontendcookies entre el sitio web de magento con diferentes dominios utilizando esa solución ainixon.me/set-cookie-on-cross-domains .

Necesita crear un cookies.phparchivo con el siguiente código

<?php
    setcookie("frontend", htmlspecialchars($_GET['SID']), time() + 86400);
?>

y en la plantilla de magento deberá agregar el siguiente código después de la <body>etiqueta

<?php 
$this_session_id = Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); 
?>
<!-- setting cookies to other domains --> 
<img src="http://anotherdomain.com/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" />
<img src="http://somedomain.ne/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" /> 
<!-- setting cookies to others domains ends -->
electroide
fuente
Hola tu solución genial. Pero estoy un poco confundido acerca de la versión magento 2.1.3. Entonces, ¿dónde debo ingresar este código en esta nueva versión?
Zammuuz
Aquí se discutieron algunas implicaciones de seguridad de esta sugerencia security.stackexchange.com/questions/174678/…
Goose
3

Simplemente redirija con y ?SID=yourSessionIdluego puede usarlo en la otra vista de la tienda.

Fabian Blechschmidt
fuente
¿Magento no tiene una configuración para habilitar o no el SID en las URL? Creo que hay algo en Configuración> Web> Sesión. ¿No?
Sylvain Rayé
Sí, cuando redirige entre las vistas de tienda. hay algo, pero no creo que esto funcione si lo haces manualmente. Pero sí, Luke, eche un vistazo a esto en el backend y, en consecuencia, podría hacer la vida más fácil :)
Fabian Blechschmidt
Esto ya está habilitado, pero no funciona para mí de forma predeterminada. El módulo que creamos está diseñado para extraer una ubicación basada en IP y luego dirigir en consecuencia, y también permite a las personas seleccionar tiendas. Simplemente estoy trabajando en el código mage_run_code antes de que Mage :: run se llame inicialmente. Pero no sé cómo puedo agregar un valor de sesión personalizado antes de ejecutar mage y también tener el ID de sesión agregado a la redirección de URL, ya que esto se maneja en core / url
lukefowell
solo busque el código para SID. Todo sucede aquí: \Mage_Core_Model_Session_Abstract::setSessionId()así que solo verifique cuándo está establecida la identificación de la sesión y configúrela.
Fabian Blechschmidt
1
Es posible que desee ser más específico al sugerir esto. Si el SID se agrega a una URL disponible desde un enlace, el usuario podría compartir ese enlace en un foro o en otro lugar que le causaría todo tipo de problemas.
pspahn
2

Solo asegúrese de que Use SID in frontendesté habilitado.

Ninguna ...

  • URL generada por Mage::getUrl()
  • Redirigir con $this->_redirectUrl($url);oMage::app()->getFrontController()->getResponse()->setRedirect()

Entonces contendrá el respeto SID.

Si está utilizando el filesalmacenamiento de sesión, solo asegúrese de que el directorio sea común symlinked; Si está utilizando Memcache / Redis / DB, esto no es una preocupación.

-

Solo tenga en cuenta que hay muchas formas elegantes de manejar la redirección GeoIP más arriba que Magento. Puede hacerlo en el nivel del servidor web (verificando la presencia de su respectiva cookie "sin redireccionamiento").

Ben Lessani - Sonassi
fuente
Descubrí que inicialmente incluye el SID al final de la URL, pero sigue redirigiendo en círculos. Lo que quiero hacer es que cuando redirija manualmente establezca un valor de sesión para que deje de buscar la IP la próxima vez y la envíe de regreso a donde vino. Sin embargo, aparece un error como "El controlador de" clave de registro de Mage "ya existe" cuando intento acceder a cualquier método de fábrica en magento o recuperar datos de sesión, etc. Así que estoy tratando de encontrar una manera de pasar una bandera para decir "no don No busque de nuevo por favor ". ¿Algunas ideas?
lukefowell
Tendrá un bucle de redireccionamiento solo por su propio código. No hay una forma real en que pueda ayudarlo aquí, su problema está demasiado localizado.
Ben Lessani - Sonassi
0

En su administrador, vaya a Configuración> Web> Sesión> Usar SID en Frontend y habilítelo.

Cuando vaya de un sitio a otro, pase la sesión incluyéndola en la url (úsela &si ya la usó ?para un $_GETparámetro)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
ganso
fuente