Совместное использование сеансов между магазинами с разными доменами

8

У меня есть три сайта с установкой Magento, у каждого есть свой домен.

Теперь из-за безопасности веб-браузера вы не можете получить доступ к файлам cookie с другого домена или сессий.

Как-то мне нужно иметь возможность передавать временные данные между двумя разными магазинами с разными доменами.

Мой конкретный вариант использования:

Я использую GeoIP для запуска перенаправления в правильное хранилище стран, однако мне также нужно иметь возможность вручную переопределить это. Сейчас у меня возникла проблема, когда я вручную переопределяю текущее хранилище с помощью файла cookie, однако, когда я перенаправлен в другое хранилище, в другом хранилище нет файла cookie, поэтому он возвращается к предыдущему состоянию и ищет пользователей. магазин на основе GeoIP. Однако это затем создает бесконечный цикл, перенаправляющий между магазинами.

Это делается путем определения кода веб-сайта для магазина, в котором я хочу использовать index.phpпользовательский модуль, и запуска Magento с правильным кодом. Это обрабатывает все перенаправления и т. Д. Для меня тогда.

lukefowell
источник
Размещены ли просмотры вашего магазина на разных сайтах? Я имею в виду сайты в терминологии Magento. Если да, вам также может понадобиться прочитать эту статью, в которой объясняется, как создать простое расширение, которое разделяет корзину покупок между различными веб-сайтами Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Ответы:

5

Вы можете поделиться frontendcookie-файлами между веб-сайтом magento и различными доменами, используя это решение ainixon.me/set-cookie-on-cross-domains .

Вам нужно создать cookies.phpфайл со следующим кодом

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

и в шаблоне magento вам нужно будет добавить следующий код после <body>тега

<?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
источник
Привет, ваше решение потрясающе. Но я немного запутался в версии magento 2.1.3. Так, где я должен ввести этот код в этой новой версии?
Заммуз
Некоторые последствия этого предложения для безопасности
Гусь
3

Просто перенаправьте, ?SID=yourSessionIdзатем вы можете использовать его в другом представлении магазина.

Фабиан Блехшмидт
источник
У Magento нет конфигурации для включения или нет SID в URL? Я думаю, что-то есть в Configuration> Web> Session. Нет?
Сильвен Райе
да, когда вы перенаправляете между магазинами. что-то есть, но я не думаю, что это работает, если вы делаете это вручную. Но да, Люк, взгляни на это в бэкенде и, следовательно, это может облегчить жизнь :)
Фабиан Блехшмидт
Это уже включено, но у меня не работает по умолчанию. Созданный нами модуль предназначен для извлечения местоположения на основе IP-адреса, а затем для направления соответствующим образом, а также позволяет людям выбирать магазины. Я просто работаю над mage_run_code до того, как Mage :: run будет первоначально вызван. Но я не знаю, как я могу добавить пользовательское значение сеанса перед запуском мага, а также добавить идентификатор сеанса к перенаправлению URL, поскольку это обрабатывается в core / url
lukefowell
просто найдите код для SID. Здесь все происходит: \Mage_Core_Model_Session_Abstract::setSessionId()просто проверьте, установлен ли идентификатор сессии, и установите его.
Фабиан Блехшмидт
1
Возможно, вы хотите быть более конкретным, предлагая это. Если идентификатор безопасности добавляется к URL-адресу, доступному по ссылке, пользователь может поделиться этой ссылкой на форуме или в другом месте, что может вызвать у вас всевозможные проблемы.
pspahn
2

Просто убедитесь, Use SID in frontendчто включен.

Любые ...

  • URL, созданный Mage::getUrl()
  • Перенаправить с помощью $this->_redirectUrl($url);илиMage::app()->getFrontController()->getResponse()->setRedirect()

Затем будет содержать уважение SID.

Если вы используете filesдля хранения сеанса, просто убедитесь, что каталог обычно symlinked; если вы используете Memcache / Redis / DB, это не проблема.

-

Просто отметьте, что существует множество изящных способов справиться с перенаправлением GeoIP дальше, чем Magento. Вы можете сделать это на уровне веб-сервера (проверяя наличие соответствующего файла cookie «без перенаправления»).

Бен Лессани - Сонасси
источник
Я обнаружил, что изначально он включает SID в конце URL, но он продолжает перенаправлять по кругу. То, что я хочу сделать, - это когда я вручную перенаправляю установить значение сеанса, чтобы он не смотрел IP снова в следующий раз, чтобы отправить его туда, откуда он пришел. Однако я получаю сообщение об ошибке, например, «ключ реестра Mage», контроллер «уже существует», когда я пытаюсь получить доступ к любым заводским методам в magento или получить данные сеанса и т. Д. Поэтому я пытаюсь найти способ передать флаг, чтобы сказать «нет дон» Не ищите снова, пожалуйста ". Любые идеи?
Lukefowell
У вас будет цикл перенаправления только из-за вашего собственного кода. Я не могу помочь вам в этом, ваш вопрос слишком локализован.
Бен Лессани - Сонасси
0

В вашем администраторе перейдите в «Конфигурация»> «Интернет»> «Сеанс»> «Использовать SID во внешнем интерфейсе» и включите.

При переходе с одного сайта на другой пропустите сеанс, включив его в URL (используйте, &если вы уже используете ?для $_GETпараметра)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
Гусь
источник