Cookies не работают с поддоменами

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. У них обоих есть свои админы. Но вы только говорите мне установить домен для одного из администраторов. Вы говорите, что я должен оставить другой пустым?
Баттл Буткус
Ах я вижу. На самом деле я не знал, что это 2 отдельные установки. Работает ли основной магазин с доменом www или без него? Вы можете установить домен cookie в тесте test.example.comв основной магазин, www.example.comчтобы избежать наложения cookie.
Анна Фёлькл
9

Анна делает некоторые хорошие замечания, и ее ответ будет работать для многих людей, но не для меня, поэтому я публикую свой собственный ответ. Возможно, моя проблема была гораздо более фундаментальной, чем та, к которой она обращается.

Моим решением было изменить домен моего сайта с example.comна www.example.com. Фактически, мои исследования в Интернете показывают, что сайты, такие как Amazon, Google, Ebay и другие крупные сайты, используют wwwпрефикс в значительной степени из-за того, как работают куки. Возможно, нет.

По умолчанию cookie работает так, что он применяется ко всем поддоменам. Таким образом, если example.comвы отправляете куки, то вы посещаете mail.example.com, smile.example.comили devsite.example.com, тогда ваш браузер отправит этот куки на эти сайты, и эти сайты попытаются использовать куки. Но они не смогут найти ваш сеанс, если все они не будут использовать общую папку сеанса. И даже тогда у вас могут возникнуть проблемы из-за разных конфигураций базы данных, разных структур приложений и т. Д.

Внесение изменений включало создание перенаправлений 301 в моем корневом файле htaccess, изменение защищенных / небезопасных URL-адресов в core_config_dataтаблице базы данных magento , изменение сайтов ServerNameв Apache VirtualHostsи обновление настроек DNS / сервера имен. Но это того стоило.

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

Баттл Буткус
источник
1
Я хотел бы дать несколько голосов за этот ответ. Я искал решение в течение нескольких месяцев, и все продолжают говорить о Cookie Path и Cookie Domain, но это не решит проблему, если вы не используете www. Спасибо!!
Бруно Монтейру
У нас уже есть www в домене cookie, но он все равно не работает ...
Black
Что еще не получилось?
Баттл Буткус
3

Вы можете просто изменить adminhtml cookie для поддоменов.

Два изменения в файле 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':'')));

если какие-либо происшествия будут найдены.

maxvgi
источник
1
Не могли бы вы объяснить словами, как ваш код изменяет взаимодействие файлов cookie клиента и сервера для изоляции сеансов?
Баттл Буткус
@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 в таком решении, верно?
Баттл Буткус
@ButtleButkus вы правы. Извините, я не написал это, потому что у меня не было такой проблемы.
maxvgi
Это нормально, все еще полезно для некоторых людей, вероятно.
Баттл Буткус
0

Если вы все еще не можете войти в свой веб-интерфейс (сеанс клиента не может быть создан) из-за проблем с файлами cookie, переопределите соответствующий основной файл.

До 1.8.х. версии - приложение / код / ​​ядро ​​/ маг / клиент / модель / session.php

и

с 1.8.х. версия приложения / код / ​​core / Mage / Core / Model / Session / Abstract.php

Закомментируйте строки, указанные в этой теме. Это исправило проблему с входом клиента в веб-интерфейс до версии 1.8.x.

/magento//a/34057/695

Haijerome
источник