Cookies funktionieren nicht mit Subdomains

11

Wir haben eine Hauptseite bei example.com. Die Anmeldung example.com/adminfunktioniert dort einwandfrei .

Auf einer Testseite unter test.example.com/adminkann ich mich jedoch nicht beim Administrator anmelden, ohne zuvor alle example.comCookies gelöscht zu haben . Dann kann ich mich anmelden, aber sobald ich mich bei example.com/adminmeinem nächsten Klick auf den Testserver anmelde, kehre ich zur Anmeldeseite zurück.

Ich weiß nicht, ob dies Auswirkungen auf Kundenanmeldungen hat.

Gibt es eine Konfiguration auf der Haupt- oder Testwebsite, die dieses Problem lösen könnte?

Buttle Butkus
quelle

Antworten:

14
  1. Wählen Sie im Admin-Menü System> Konfiguration. Klicken Sie dann im linken Bereich unter Allgemein auf Web.
  2. Erweitern Sie den Abschnitt Sitzungscookie-Verwaltung

Stellen Sie im example.comShop Folgendes ein:

  1. Stellen Sie die Cookie-Domain auf example.com ein (normalerweise ist diese Einstellung .example.com mit einem Punkt vor, in diesem Fall können Sie es auch ohne versuchen).

Stellen Sie im test.example.comShop Folgendes ein:

  1. Setzen Sie die Cookie-Domain in der Testumgebung auf .test.example.com. (Das "." vor der Domain sollte hier in Ordnung sein.)
Anna Völkl
quelle
2
Nur eine Anmerkung, Schritt 3 über die .vor der Domain, ist wichtig!
B00MER
Hallo Anna. Sollte die Cookie-Domain im example.comAdministrator, im test.example.comAdministrator oder in beiden auf ".example.com" gesetzt werden ?
Buttle Butkus
Ich würde es als Standardkonfiguration festlegen (das ist wohl Ihr example.com-Administrator). Dies bedeutet also .example.com für alle Bereiche.
Anna Völkl
@ AnnaVölkl Ich bin mir hier nicht sicher. Sie verstehen, dass ich zwei völlig separate Magento-Installationen auf zwei verschiedenen Maschinen habe, oder? Einer benutzt example.com, der andere test.example.com. Sie haben beide ihre eigenen Admins. Aber Sie sagen mir nur, ich soll eine Domain für einen der Administratoren einrichten. Wollen Sie damit sagen, dass ich den anderen leer lassen soll?
Buttle Butkus
Ah ich sehe. In der Tat war mir nicht bewusst, dass es sich um zwei separate Installationen handelt. Läuft der Hauptshop mit oder ohne www-Domain? Sie können die Cookie-Domain im Test auf test.example.comund im Hauptshop festlegen www.example.com, um zu vermeiden, dass sich Cookies überschneiden.
Anna Völkl
9

Anna macht einige gute Punkte und ihre Antwort wird für viele Leute funktionieren, aber nicht für mich, also poste ich meine eigene Antwort. Vielleicht war mein Problem viel grundlegender als das, das sie anspricht.

Meine Lösung bestand darin, die Domain meiner Site von example.comauf zu ändern www.example.com. Tatsächlich legen meine Recherchen im Internet nahe, dass der Grund, warum Websites wie Amazon, Google, Ebay und jedes andere wichtige Webziel das wwwPräfix verwenden, zu einem großen Teil auf die Funktionsweise von Cookies zurückzuführen ist. Vielleicht nicht.

Ein Cookie funktioniert standardmäßig für alle Subdomains. Also , wenn example.comSie ein Cookie sendet, dann besuchen Sie mail.example.com, smile.example.comoderdevsite.example.com , dann wird Ihr Browser das Cookie auf den verlinkten Seiten senden und diese Seiten werden versuchen , das Cookie zu verwenden. Sie können Ihre Sitzung jedoch nur finden, wenn sie alle einen gemeinsamen Sitzungsordner verwenden. Und selbst dann hätten Sie wahrscheinlich Probleme aufgrund unterschiedlicher Datenbankkonfigurationen, unterschiedlicher Anwendungsstrukturen usw.

Das Vornehmen der Änderung umfasste das Erstellen von 301 Weiterleitungen in meiner Stamm-htaccess-Datei, das Ändern der sicheren / unsicheren URLs in der Magento- core_config_dataDatenbanktabelle, das Ändern der Site ServerNamein Apache VirtualHostsund das Aktualisieren der DNS- / Nameserver-Einstellungen. Aber es hat sich gelohnt.

Wenn ich meine Hauptseite erstelle www.example.com, gelten ihre Cookies jetzt nur noch für Subdomains wie mail.www.example.com(und wir haben keine solchen Subdomains). Client-Browser, die das www.example.comCookie erhalten, senden es nicht an devsite.example.com, und das Problem ist behoben. Außerdem ist es wirklich schön, einen wwwvor unserem Domainnamen zu haben.

Buttle Butkus
quelle
1
Ich wünschte, ich könnte mehrere Up Votes für diese Antwort geben. Ich bin seit Monaten auf der Suche nach einer Lösung und alle sagen immer wieder über Cookie Path und Cookie Domain, aber das wird das Problem nicht beheben, wenn Sie nicht www verwenden. Vielen Dank!!
Bruno Monteiro
Wir haben bereits www in der Cookie-Domain, aber es schlägt immer noch fehl ...
Black
Was scheitert noch?
Buttle Butkus
3

Sie können einfach den Namen des adminhtml-Cookies für Subdomains ändern.

Zwei Änderungen in der Datei app/code/core/Mage/Core/Controller/Varien/Action.php.

In der Funktion preDispatchWechsellinien

/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();

zu

$namespace = $this->_sessionNamespace.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace))->start();

In Funktion setRedirectWithCookieCheckändern

/** @var $session Mage_Core_Model_Session */
session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace));

zu

$namespace = $this->_sessionNamespace.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace));

Und danach nach Text suchen

Mage::getSingleton('core/session', array('name' => 'adminhtml'));

in allen Dateien und ersetzen Sie es durch

Mage::getSingleton('core/session', array('name' => 'adminhtml'.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'')));

wenn irgendwelche Vorkommen gefunden würden.

maxvgi
quelle
1
Können Sie in Worten erklären, wie Ihr Code Client- und Server-Cookie-Interaktionen verändert, um Sitzungen zu isolieren?
Buttle Butkus
@ButtleButkus Das Problem ist, dass example.com/admin ein Cookie mit dem Namen adminhtmlfür die Domain setzt .example.com. Wenn Sie versuchen, unter test.example.com/admin zu autorisieren, wird versucht, etwas mit dem Cookie adminhtmlfür zu tun .test.example.com. Die Probleme unterscheiden sich in den Magento-Einstellungen. Das Hauptproblem besteht darin, dass Sie das Cookie der Hauptdomäne nicht über die Unterdomäne ändern können. Mit dem obigen Code erstellt Magento Cookies adminhtmlfür example.com und Cookies adminhtml_subdomainfür subdomain.example.com, sodass sie in keiner Weise gemischt werden. Wechseln Sie subdomainzu dem richtigen, den Sie verwenden.
Maxvgi
Das ist gut für den Administrator. Aber die Frontend-Seite sollte bei dieser Art von Lösung auch den Cookie-Namen ändern, oder?
Buttle Butkus
@ ButtleButkus du hast recht. Entschuldigung, ich habe das nicht geschrieben, weil ich so ein Problem nicht hatte.
Maxvgi
Es ist in Ordnung, wahrscheinlich immer noch nützlich für einige Leute.
Buttle Butkus
0

Wenn Sie sich aufgrund von Cookie-Problemen immer noch nicht bei Ihrem Frontend anmelden können (Kundensitzung kann nicht erstellt werden), überschreiben Sie bitte die entsprechende Kerndatei

Pre 1.8.x. Versionen - App / Code / Core / Magier / Kunde / Modell / session.php

und

von 1.8.x. Version App / Code / Core / Magier / Core / Modell / Sitzung / Abstract.php

Kommentieren Sie die Zeilen aus, auf die in diesem Thread hingewiesen wird. Dies hat das Problem mit der Kundenanmeldung im Frontend im Versionsspeicher vor 1.8.x behoben.

/magento//a/34057/695

Haijerome
quelle