Pliki cookie nie działają z poddomenami

11

Mamy stronę główną pod adresem example.com. Logowanie się example.com/admintam działa dobrze.

Ale na stronie testowej pod adresem test.example.com/adminnie mogę zalogować się do administratora bez uprzedniego usunięcia wszystkich example.complików cookie. Następnie mogę się zalogować, ale jak tylko zaloguję się do example.com/adminmojego następnego kliknięcia, serwer testowy powoduje powrót do strony logowania.

Nie wiem, czy to wpływa na logowanie klientów.

Czy w głównej witrynie lub w witrynie testowej jest jakaś konfiguracja, która rozwiązałaby ten problem?

Buttle Butkus
źródło

Odpowiedzi:

14
  1. W menu Administrator wybierz System> Konfiguracja. Następnie w panelu po lewej stronie w obszarze Ogólne kliknij opcję Internet.
  2. Rozwiń sekcję Zarządzanie plikami cookie sesji

W example.comsklepie ustaw następujące ustawienia:

  1. Ustaw domenę plików cookie na example.com (zwykle to ustawienie to .example.com z kropką z przodu, w tym przypadku możesz spróbować bez tej opcji).

W test.example.comsklepie ustaw następujące ustawienia:

  1. Ustaw domenę Cookie na .test.example.com w środowisku testowym. („.” przed domeną powinno być w porządku)
Anna Völkl
źródło
2
.Ważna jest tylko uwaga: krok 3 dotyczący przedniej części domeny!
B00MER,
Cześć Anna. Czy domena ciasteczek powinna być ustawiona na „.example.com” w example.comadminie, test.example.comadminie, czy w obu przypadkach?
Buttle Butkus,
Ustawiłbym to jako domyślną konfigurację (jak sądzę, jest to twój administrator example.com). Oznacza to więc .example.com dla wszystkich zakresów.
Anna Völkl,
@ AnnaVölkl Nie jestem tu pewien. Rozumiesz, że mam dwie całkowicie oddzielne instalacje Magento na dwóch różnych maszynach, prawda? Jeden używa example.com, drugi test.example.com. Obaj mają własnych administratorów. Ale mówisz mi tylko, aby ustawić domenę dla jednego z administratorów. Mówisz, że powinienem zostawić drugą pustą?
Buttle Butkus
O, rozumiem. Rzeczywiście nie wiedziałem, że są to 2 oddzielne instalacje. Czy główny sklep działa z domeną www lub bez? Możesz ustawić domenę plików cookie w teście na test.example.comi w głównym sklepie, www.example.comaby uniknąć nakładania się plików cookie.
Anna Völkl
9

Anna podaje kilka dobrych punktów, a jej odpowiedź zadziała dla wielu osób, ale nie dla mnie, więc zamieszczam własną odpowiedź. Być może mój problem był o wiele bardziej fundamentalny niż ten, do którego się odnosi.

Moim rozwiązaniem była zmiana domeny mojej witryny z example.comna www.example.com. W rzeczywistości moje badania w Internecie sugerują, że powód, dla którego witryny takie jak Amazon, Google, Ebay i każde inne główne miejsce docelowe sieci używają wwwprefiksu, może być w dużej mierze spowodowane sposobem działania plików cookie. Może nie.

Domyślny sposób działania pliku cookie polega na tym, że dotyczy wszystkich subdomen. Jeśli więc example.comwyśle ​​Ci plik cookie, a następnie odwiedzisz mail.example.com, smile.example.comlub devsite.example.comTwoja przeglądarka wyśle ​​ten plik cookie do tych witryn, a strony te spróbują je wykorzystać. Ale nie będą w stanie znaleźć Twojej sesji, chyba że wszyscy użyją wspólnego folderu sesji. I nawet wtedy prawdopodobnie będziesz mieć problemy z powodu różnych konfiguracji bazy danych, różnych struktur aplikacji itp.

Dokonanie zmiany polegało na utworzeniu przekierowań 301 w moim głównym pliku htaccess, zmianie bezpiecznych / niepewnych adresów URL w core_config_datatabeli bazy danych magento , zmianie strony ServerNamew Apache VirtualHostsi aktualizacji ustawień DNS / nameserver. Ale było warto.

Tworząc moją główną stronę www.example.com, jej pliki cookie miałyby teraz zastosowanie tylko do jej subdomen, takich jak mail.www.example.com(i nie mamy takich subdomen). Przeglądarki klienckie, które pobierają www.example.complik cookie, nie wysyłają go devsite.example.com, a problem został rozwiązany. Ponadto naprawdę miło jest mieć wwwprzed naszą nazwą domeny.

Buttle Butkus
źródło
1
Żałuję, że nie mogłem dać więcej głosów na tę odpowiedź. Poszukuję rozwiązania od miesięcy i wszyscy mówią o ścieżce plików cookie i domenie plików cookie, ale to nie rozwiąże problemu, jeśli nie użyjesz strony www. Dziękuję Ci!!
Bruno Monteiro,
Mamy już www w domenie ciasteczek, ale nadal nie działa ...
Black
Co nadal zawodzi?
Buttle Butkus
3

Możesz po prostu zmienić nazwę pliku cookie adminhtml dla subdomen.

Dwie zmiany w pliku app/code/core/Mage/Core/Controller/Varien/Action.php.

W preDispatchwierszach zmiany funkcji

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

do

$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();

W setRedirectWithCookieCheckzmianie funkcji

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

do

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

A potem wyszukaj tekst

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

we wszystkich plikach i zamień go na

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

jeśli jakieś zdarzenia zostaną znalezione.

maxvgi
źródło
1
Czy potrafisz wyjaśnić słowami, w jaki sposób kod zmienia interakcje plików cookie klienta i serwera, aby izolować sesje?
Buttle Butkus
@ButtleButkus problem polega na tym, że example.com/admin ustawia plik cookie z nazwą adminhtmldomeny .example.com. Podczas próby zezwolić na test.example.com/admin, próbuje coś zrobić z cookie adminhtmldla .test.example.com. Problemy różnią się w ustawieniach Magento. Głównym problemem jest to, że nie można modyfikować plików cookie domeny głównej z subdomeny. Powyższy kod powoduje, że Magento tworzy ciasteczka adminhtmlna przykład.com i ciasteczka adminhtml_subdomaindla subdomena.example.com, więc nie będą się w żaden sposób mieszały. Zmień subdomainna właściwy, którego używasz.
maxvgi
To dobrze dla administratora. Ale frontend powinien również zmienić nazwę pliku cookie w tego rodzaju rozwiązaniu, prawda?
Buttle Butkus
@ButtleButkus masz rację. Przepraszam, nie napisałem tego, ponieważ nie miałem takiego problemu.
maxvgi
Jest w porządku, prawdopodobnie przydatne dla niektórych osób.
Buttle Butkus
0

Jeśli nadal nie możesz zalogować się do interfejsu użytkownika (nie można utworzyć sesji klienta) z powodu problemów z plikami cookie, należy zastąpić odpowiedni plik podstawowy

Przed 1.8.x. wersje - app / code / core / Mage / Customer / Model / session.php

i

od 1.8.x. wersja app / code / core / Mage / Core / Model / Session / Abstract.php

Skomentuj linie wskazane w tym wątku. To rozwiązało problem z logowaniem klienta do interfejsu użytkownika w sklepie w wersji wcześniejszej niż 1.8.x.

/magento//a/34057/695

Haijerom
źródło