Partage de sessions entre magasins avec différents domaines

8

J'ai trois sites Web sur une installation Magento, chacun a son propre domaine.

Maintenant, en raison de la sécurité du navigateur Web, vous ne pouvez pas accéder aux cookies d'un autre domaine, ni aux sessions.

D'une manière ou d'une autre, je dois pouvoir transmettre des données temporaires entre deux magasins différents avec des domaines différents.

Mon cas d'utilisation spécifique:

J'utilise GeoIP pour déclencher une redirection vers le magasin de pays correct, mais je dois également pouvoir remplacer manuellement cela. Maintenant, pour le moment, j'ai un problème où je remplace manuellement le magasin actuel avec un cookie, mais lorsque je suis redirigé vers l'autre magasin, il n'y a pas de cookie sur l'autre magasin, il tombe donc en arrière et recherche les utilisateurs magasin basé sur GeoIP. Cependant, cela crée alors une boucle infinie redirigeant entre trop de magasins.

Cela se fait en déterminant le code du site Web pour le magasin dans lequel je veux utiliser index.phpavec un module personnalisé et en exécutant Magento avec le bon code. Cela gère alors toutes les redirections, etc. pour moi.

lukefowell
la source
Les vues de votre magasin sont-elles placées sur différents sites Web? Je veux dire des sites Web dans la terminologie de Magento. Si oui, vous devrez peut-être également lire cet article, qui explique comment créer une extension simple, qui partage le panier entre différents sites Web Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Réponses:

5

Vous pouvez partager des frontendcookies entre le site Web magento avec différents domaines en utilisant cette solution ainixon.me/set-cookie-on-cross-domains .

Vous devez créer un cookies.phpfichier avec le code suivant

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

et dans le modèle magento, vous devrez ajouter le code suivant après la <body>balise

<?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 -->
électroïde
la source
Salut votre solution génial. Mais je suis un peu confus à propos de la version magento 2.1.3. alors où dois-je entrer ce code dans cette nouvelle version?
Zammuuz
Certaines implications de sécurité de cette suggestion ont été discutées ici security.stackexchange.com/questions/174678/…
Goose
3

Redirigez simplement avec ?SID=yourSessionIdpuis vous pouvez simplement l'utiliser sur l'autre vue de la boutique.

Fabian Blechschmidt
la source
Magento n'a pas de configuration pour activer ou non le SID dans les URL? Je pense qu'il y a quelque chose dans Configuration> Web> Session. Non?
Sylvain Rayé
oui, lorsque vous redirigez entre les vues de magasin. il y a quelque chose, mais je ne pense pas que cela fonctionne si vous le faites manuellement. Mais oui Luke, jetez un œil à cela dans le backend et les conséquences, cela pourrait vous faciliter la vie :)
Fabian Blechschmidt
Ceci est déjà activé, mais je ne travaille pas pour moi par défaut. Le module que nous avons créé est conçu pour extraire un emplacement basé sur IP, puis diriger en conséquence, et permet également aux gens de sélectionner des magasins. Je travaille simplement sur mage_run_code avant que Mage :: run soit initialement appelé. Mais je ne sais pas comment ajouter une valeur de session personnalisée avant l'exécution de mage et également avoir l'ID de session ajouté à la redirection d'URL, car cela est géré dans core / url
lukefowell
recherchez simplement le code pour SID. Tout se passe ici: \Mage_Core_Model_Session_Abstract::setSessionId()il suffit donc de vérifier quand l'ID de session est défini et de le définir.
Fabian Blechschmidt
1
Vous voudrez peut-être être plus précis en suggérant cela. Si le SID est ajouté à une URL disponible à partir d'un lien, l'utilisateur pourrait partager ce lien sur un forum ou ailleurs, ce qui vous causerait toutes sortes de problèmes.
pspahn
2

Assurez Use SID in frontend- vous simplement qu'il est activé.

Tout ...

  • URL générée par Mage::getUrl()
  • Rediriger avec $this->_redirectUrl($url);ouMage::app()->getFrontController()->getResponse()->setRedirect()

Contiendra alors le respect SID.

Si vous utilisez filespour le stockage de session, assurez-vous simplement que le répertoire est commun symlinked; si vous utilisez Memcache / Redis / DB, ce n'est pas un problème.

-

Notez simplement qu'il existe de nombreuses façons gracieuses de gérer la redirection GeoIP plus haut que Magento. Vous pouvez le faire au niveau du serveur Web (vérifier la présence de votre cookie "sans redirection" respectif).

Ben Lessani - Sonassi
la source
J'ai trouvé qu'il inclut le SID à la fin de l'URL au départ, mais il continue de rediriger en rond. Ce que je veux faire, c'est quand je redirige manuellement définir une valeur de session pour l'empêcher de rechercher l'adresse IP la prochaine fois pour la renvoyer d'où elle vient. Cependant, j'obtiens une erreur comme "La clé de registre Mage" contrôleur "existe déjà" lorsque j'essaie d'accéder à des méthodes d'usine dans magento ou de récupérer des données de session, etc. J'essaie donc de trouver un moyen de passer un indicateur pour dire "non don" ne cherchez plus s'il vous plait ". Des idées?
lukefowell
Vous aurez une boucle de redirection juste à cause de votre propre code. Je ne peux vraiment pas vous aider ici, votre problème est beaucoup trop localisé.
Ben Lessani - Sonassi
0

Dans votre administrateur, accédez à Configuration> Web> Session> Utiliser SID sur le frontend et activez.

Lorsque vous passez d'un site à un autre, passez la session en l'incluant dans l'url (à utiliser &si vous l'utilisez déjà ?pour un $_GETparamètre)

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