Файли cookie не працюють з субдоменами


11

У нас є головний сайт за адресою example.com. Вхід у систему example.com/adminпрацює чудово.

Але на тестовому сайті в Інтернеті test.example.com/adminя не можу увійти до адміністратора без попереднього видалення всіх example.comфайлів cookie. Тоді я можу увійти, але як тільки я ввійду у example.com/adminсвій наступний клацання на тестовому сервері, повертає мене на сторінку входу.

Я не знаю, чи впливає це на вхід клієнтів.

Чи є якась конфігурація на головному сайті або на тестовому сайті, яка б вирішила цю проблему?

Відповіді:


14
  1. У меню адміністратора виберіть Система> Конфігурація. Потім на панелі зліва в розділі Загальні клацніть Інтернет.
  2. Розгорніть розділ «Керування файлами cookie»

У example.comмагазині встановіть наступне:

  1. Встановіть Домен cookie на example.com (зазвичай це налаштування буде .example.com з крапкою в передній частині, ви можете спробувати без цього в цьому випадку).

У test.example.comмагазині встановіть наступне:

  1. Встановіть домен Cookie на .test.example.com на тестовому середовищі. ("." перед доменом має бути добре тут)

2
Лише зауваження, крок 3 про те, що .знаходиться напроти домену, важливий!
B00MER

Привіт, Анна. Чи повинен бути встановлений домен файлу cookie на ".example.com" у example.comадміністратора, test.example.comадміністратора чи обох?
Бутлет Буткус

Я встановив би його як конфігурацію за замовчуванням (яка, напевно, є вашим адміністратором example.com). Отже, це означає .example.com для всіх областей.
Анна Вьоклл

@ AnnaVölkl Я тут не впевнений. Ви розумієте, у мене є дві абсолютно окремі установки magento на двох різних машинах, правда? Один використовує example.com, інший test.example.com. Вони обоє мають своїх адміністраторів. Але ти мені лише кажеш встановити домен для одного з адміністраторів. Ти кажеш, я повинен залишити інший порожнім?
Buttle Butkus

А, бачу. Дійсно, мені не було відомо, що це дві окремі установки. Чи працює основний магазин із www-Domain або без нього? Ви можете встановити Домен cookie на Тесті test.example.comта в основному магазині, щоб www.example.comпотім уникнути перекриття файлів cookie.
Anna Völkl

9

Анна зазначає кілька хороших моментів, і її відповідь спрацює для багатьох людей, але не для мене, тому я публікую власну відповідь. Можливо, моя проблема була набагато більш фундаментальною, ніж та, з якою вона звертається.

Моїм рішенням було змінити домен мого сайту з example.comна www.example.com. Насправді, моє дослідження в Інтернеті дозволяє стверджувати, що причина таких веб-сайтів, як Amazon, Google, Ebay та всі інші основні веб-сторінки, використовує wwwпрефікс, може бути значною мірою завдяки тому, як працюють файли cookie. Можливо, не.

Типовим способом роботи файлу cookie є те, що він застосовується до всіх субдоменів. Отже, якщо example.comви надішлете файл cookie, ви відвідаєте mail.example.com, smile.example.comабо devsite.example.com, тоді ваш веб-переглядач надішле це cookie на ці сайти, і ці сайти спробують використовувати файли cookie. Але вони не зможуть знайти ваш сеанс, якщо всі вони не використовують загальну папку сеансу. І навіть тоді у вас можуть виникнути проблеми через різні конфігурації бази даних, різні структури додатків тощо.

Внесення змін передбачає створення переадресацій 301 у моєму кореневому файлі htaccess, зміну захищених / незахищених URL-адрес у core_config_dataтаблиці бази даних magento , зміну сайту ServerNameв Apache VirtualHostsта оновлення налаштувань DNS / імені сервера. Але воно того варте того.

Створюючи основний мій сайт www.example.com, його cookie тепер застосовуватиметься лише до його піддоменів, таких як mail.www.example.com(а у нас таких субдоменів немає). Клієнтські браузери, які отримують www.example.comфайл cookie, не надсилають його devsite.example.com, і проблема вирішується. Плюс насправді приємно мати wwwперед нашим доменним іменем.


1
Я хотів би, щоб я міг дати кілька голосів за цю відповідь. Я шукаю рішення місяцями, і всі продовжують говорити про Cookie Path та Cookie Domain, але це не вирішить проблему, якщо ви не використовуєте www. Дякую!!
Бруно Монтейро

У домену cookie у нас уже є www, але він все ще не працює ...
Чорний

Що все-таки не вдається?
Баттл Butkus

3

Ви можете просто змінити ім'я файлів cookie adminhtml для субдоменів.

Дві зміни у файлі app/code/core/Mage/Core/Controller/Varien/Action.php.

У функції preDispatchзмінюють лінії

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

до

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

У setRedirectWithCookieCheckзміні функції

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

до

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

А після цього шукайте текст

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

у всіх файлах і замінити його на

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

якщо знайдуться якісь випадки.


1
Чи можете ви пояснити словами, як ваш код змінює взаємодію файлів cookie з клієнтом та сервером, щоб виділити сеанси?
Buttle Butkus

@ButtleButkus проблема полягає в тому, що example.com/admin встановлює файли cookie з назвою adminhtmlдомену .example.com. Коли ви намагаєтесь авторизувати адресу test.example.com/admin, він намагається зробити щось із файлом cookie adminhtmlдля .test.example.com. Проблеми відрізняються від налаштувань Magento. Основна проблема полягає в тому, що ви не можете змінювати файли cookie основного домену з піддомену. Наведений вище код змушує Magento створювати файли cookie adminhtmlдля example.com та cookie adminhtml_subdomainдля subdomain.example.com, тому вони не змішуватимуться жодним чином. Перейдіть subdomainна правильний, який ви використовуєте.
maxvgi

Це добре для адміністратора. Але сторона фронту також повинна змінити назву файлів cookie в такому рішенні, правда?
Buttle Butkus

@ButtleButkus ви праві. Вибачте, я цього не писав, бо не мав такої проблеми.
maxvgi

Це добре, все-таки корисно для деяких людей, напевно.
Buttle Butkus

0

Якщо ви все ще не можете увійти до свого інтерфейсу (сеанс з клієнтом неможливо створити) через проблеми з файлами cookie, будь ласка, замініть відповідний основний файл

Попередньо 1.8.x. версії - додаток / код / ​​core / Mage / Клієнт / Модель / session.php

і

від 1.8.x. версія програми / код / ​​core / Mage / Core / Модель / Сесія / Abstract.php

Прокоментуйте рядки, зазначені в цій темі. Це вирішило проблему з входом клієнта на передній план у магазині версій до 1.8.x.

https://magento.stackexchange.com/a/34057/695

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.