Teilen von Sitzungen zwischen Geschäften mit verschiedenen Domänen

8

Ich habe drei Websites in einer Magento-Installation, jede hat ihre eigene Domain.

Aufgrund der Sicherheit des Webbrowsers können Sie weder auf Cookies von einer anderen Domain noch auf Sitzungen zugreifen.

Irgendwie muss ich in der Lage sein, temporäre Daten zwischen zwei verschiedenen Speichern mit unterschiedlichen Domänen zu übertragen.

Mein spezieller Anwendungsfall:

Ich verwende GeoIP, um eine Weiterleitung zum richtigen Länderspeicher auszulösen, muss dies jedoch auch manuell überschreiben können. Im Moment habe ich das Problem, dass ich das aktuelle Geschäft manuell mit einem Cookie überschreibe. Wenn ich jedoch zum anderen Geschäft umgeleitet werde, gibt es im anderen Geschäft kein Cookie, sodass es zurückfällt und die Benutzer nachschlägt Speicher basierend auf GeoIP. Dies erzeugt dann jedoch eine Endlosschleife, die zwischen zu Speichern umleitet.

Dazu ermitteln Sie den Website-Code für das Geschäft, in dem ich index.phpein benutzerdefiniertes Modul verwenden möchte, und führen Magento mit dem richtigen Code aus. Dies behandelt dann alle Weiterleitungen usw. für mich.

lukefowell
quelle
Werden Ihre Shop-Ansichten auf verschiedenen Websites platziert? Ich meine Websites in der Terminologie von Magento. Wenn ja, müssen Sie möglicherweise auch diesen Artikel lesen, in dem erläutert wird, wie Sie eine einfache Erweiterung erstellen, die den Warenkorb zwischen verschiedenen Magento-Websites teilt
ceckoslab

Antworten:

5

frontendMit dieser Lösung ainixon.me/set-cookie-on-cross-domains können Sie Cookies zwischen Magento-Websites mit verschiedenen Domains teilen .

Sie müssen eine cookies.phpDatei mit dem folgenden Code erstellen

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

In der Magento-Vorlage müssen Sie nach dem <body>Tag den folgenden Code hinzufügen

<?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 -->
Electroid
quelle
Hallo, deine Lösung ist großartig. Aber ich bin ein wenig verwirrt über die Magento 2.1.3-Version. Wo soll ich diesen Code in dieser neuen Version eingeben?
Zammuuz
Einige Sicherheitsauswirkungen dieses Vorschlags wurden hier besprochen. Security.stackexchange.com/questions/174678/…
Goose
3

Weiterleiten mit ?SID=yourSessionIddann können Sie es einfach in der anderen Store-Ansicht verwenden.

Fabian Blechschmidt
quelle
Magento hat keine Konfiguration, um die SID in den URLs zu aktivieren oder nicht? Ich denke, es gibt etwas in Konfiguration> Web> Sitzung. Nein?
Sylvain Rayé
Ja, wenn Sie zwischen Storeviews umleiten. Es gibt etwas, aber ich denke nicht, dass dies funktioniert, wenn Sie es manuell tun. Aber ja, Luke, schau dir das im Backend an und die Konsequenzen könnten das Leben leichter machen :)
Fabian Blechschmidt
Dies ist bereits aktiviert, aber ich arbeite standardmäßig nicht für mich. Das von uns erstellte Modul wurde entwickelt, um einen Standort basierend auf der IP-Adresse abzurufen und dann entsprechend zu leiten. Außerdem können Benutzer Geschäfte auswählen. Ich arbeite einfach den mage_run_code aus, bevor Mage :: run zum ersten Mal aufgerufen wird. Aber ich weiß nicht, wie ich vor dem Ausführen des Magiers einen benutzerdefinierten Sitzungswert hinzufügen und die Sitzungs-ID an die URL-Umleitung
anhängen kann
Suchen Sie einfach den Code nach SID. Hier passiert alles: \Mage_Core_Model_Session_Abstract::setSessionId()Überprüfen Sie einfach, wann die Sitzungs-ID festgelegt ist, und legen Sie sie fest.
Fabian Blechschmidt
1
Vielleicht möchten Sie genauer sein, wenn Sie dies vorschlagen. Wenn die SID an eine URL angehängt wird, die über einen Link verfügbar ist, kann der Benutzer diesen Link in einem Forum oder anderswo freigeben, was zu allen möglichen Problemen führen würde.
pspahn
2

Stellen Sie einfach sicher, dass Use SID in frontendaktiviert ist.

Irgendein ...

  • URL generiert von Mage::getUrl()
  • Weiterleiten mit $this->_redirectUrl($url);oderMage::app()->getFrontController()->getResponse()->setRedirect()

Wird dann den Respekt enthalten SID.

Wenn Sie filesfür die Sitzungsspeicherung verwenden, stellen Sie einfach sicher, dass das Verzeichnis allgemein ist symlinked. Wenn Sie Memcache / Redis / DB verwenden, ist dies kein Problem.

- -

Beachten Sie, dass es viele elegante Möglichkeiten gibt, die GeoIP-Umleitung weiter oben als bei Magento zu handhaben. Sie können dies auf Webserver-Ebene tun (indem Sie das Vorhandensein Ihres jeweiligen "No-Redirect" -Cookies überprüfen).

Ben Lessani - Sonassi
quelle
Ich habe festgestellt, dass es anfangs die SID am Ende der URL enthält, aber es wird immer wieder in Kreisen umgeleitet. Ich möchte einen Sitzungswert manuell umleiten, um zu verhindern, dass er beim nächsten Mal erneut nach der IP-Adresse sucht, um sie an den Ort zurückzusenden, von dem sie stammt. Ich erhalte jedoch eine Fehlermeldung wie "Der Registrierungsschlüssel des Magiers", "Controller" ist bereits vorhanden ", wenn ich versuche, auf Werksmethoden in Magento zuzugreifen oder Sitzungsdaten usw. abzurufen. Daher versuche ich, ein Flag zu übergeben, um" no don "zu sagen bitte nicht nochmal nachschlagen ". Irgendwelche Ideen?
Lukefowell
Sie haben eine Umleitungsschleife nur aufgrund Ihres eigenen Codes. Ich kann Ihnen hier nicht wirklich weiterhelfen, Ihr Problem ist viel zu lokalisiert.
Ben Lessani - Sonassi
0

Gehen Sie in Ihrem Administrator zu Konfiguration> Web> Sitzung> SID im Frontend verwenden und aktivieren.

Wenn Sie von einer Site zur anderen wechseln, übergeben Sie die Sitzung, indem Sie diese in die URL aufnehmen (verwenden &Sie diese Option, wenn Sie sie bereits ?für einen $_GETParameter verwenden).

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