Compartilhando sessões entre lojas com domínios diferentes

8

Eu tenho três sites em uma instalação Magento, cada um com seu próprio domínio.

Agora, devido à segurança do navegador da web, você não pode acessar cookies de outro domínio, nem sessões.

De alguma forma, preciso passar dados temporários entre dois repositórios diferentes com domínios diferentes.

Meu caso de uso específico:

Estou usando o GeoIP para acionar um redirecionamento para a loja de países correta, mas também preciso substituí-lo manualmente. Agora, no momento, estou tendo o problema em que estou substituindo manualmente na loja atual por um cookie; no entanto, quando sou redirecionado para a outra loja, não há cookie na outra loja, então ele volta e procura os usuários loja baseada em GeoIP. No entanto, isso cria um loop infinito redirecionando também entre lojas.

Isso é feito descobrindo o código do site da loja em que quero usar index.phpum módulo personalizado e executando o Magento com o código correto. Isso lida com todos os redirecionamentos etc para mim, então.

lukefowell
fonte
As visualizações de sua loja são colocadas em sites diferentes? Quero dizer sites na terminologia do Magento. Se sim, talvez você também precise ler este artigo, que explica como criar uma extensão simples, que compartilha o carrinho de compras entre diferentes sites do Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Respostas:

5

Você pode compartilhar o frontendcookie entre o site magento e domínios diferentes usando a solução ainixon.me/set-cookie-on-cross-domains .

Você precisa criar um cookies.phparquivo com o seguinte código

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

e no modelo magento você precisará adicionar o seguinte código após a <body>tag

<?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 -->
eletróide
fonte
Olá, sua solução é incrível. Mas estou um pouco confuso sobre a versão magento 2.1.3. Então, onde devo inserir esse código nesta nova versão?
Zammuuz 26/01
Algumas implicações de segurança desta sugestão foram discutidas aqui security.stackexchange.com/questions/174678/…
Goose
3

Basta redirecionar com ?SID=yourSessionIde você pode usá-lo na outra visualização da loja.

Fabian Blechschmidt
fonte
O Magento não possui uma configuração para ativar ou não o SID nos URLs? Eu acho que há algo em Configuração> Web> Sessão. Não?
Sylvain Rayé
Sim, quando você redireciona entre visualizações de loja. existe algo, mas não acho que isso funcione se você fizer manualmente. Mas sim Luke, ter um olhar para isso no backend eo consequensted, pode tornar a vida mais fácil :)
Fabian Blechschmidt
Isso já está ativado, mas eu não trabalho para mim por padrão. O módulo que criamos foi projetado para obter um local com base no IP e depois direcioná-lo de acordo, além de permitir que as pessoas selecionem lojas. Estou simplesmente elaborando o mage_run_code antes que o Mage :: run seja chamado inicialmente. Mas eu não sei como eu posso adicionar um valor de sessão personalizado antes mago corrida e também tem a identificação da sessão anexada ao redirecionamento url, como isso é tratado em core / url
lukefowell
basta procurar o código por SID. Tudo acontece aqui: \Mage_Core_Model_Session_Abstract::setSessionId()basta verificar quando o ID da sessão está definido e configurá-lo.
Fabian Blechschmidt
11
Você pode querer ser mais específico ao sugerir isso. Se o SID for anexado a um URL disponível em um link, o usuário poderá compartilhar esse link em um fórum ou em outro local que possa causar todos os tipos de problemas.
pspahn
2

Apenas verifique se Use SID in frontendestá ativado.

Qualquer ...

  • URL gerado por Mage::getUrl()
  • Redirecionar com $this->_redirectUrl($url);ouMage::app()->getFrontController()->getResponse()->setRedirect()

Em seguida, conterá o respeito SID.

Se você estiver usando filespara armazenamento de sessão, verifique se o diretório é comum symlinked; se você estiver usando Memcache / Redis / DB, isso não é uma preocupação.

-

Observe que existem muitas maneiras simples de lidar com o redirecionamento GeoIP mais além do Magento. Você pode fazer isso no nível do servidor da web (verificando a presença do respectivo cookie "sem redirecionamento").

Ben Lessani - Sonassi
fonte
Descobri que ele está incluindo o SID no final do URL inicialmente, mas ele continua redirecionando em círculos. O que eu quero fazer é quando redirecionar manualmente, defina um valor de sessão para impedi-lo de procurar o IP novamente na próxima vez e enviá-lo de volta para onde ele veio. No entanto, eu recebo um erro como "chave de registro Mage" controller "já existe" sempre que tento acessar qualquer método de fábrica no magento ou recuperar dados da sessão etc. Por isso, estou tentando encontrar uma maneira de passar uma bandeira para dizer "no don procure novamente por favor ". Alguma ideia?
Lukefowell 10/05
Você terá um loop de redirecionamento apenas por causa do seu próprio código. Não há nenhuma maneira real de ajudá-lo aqui, seu problema é muito localizado.
Ben Lessani - Sonassi
0

No seu administrador, vá para Configuração> Web> Sessão> Usar SID no Frontend e ative.

Ao ir de um site para outro, passe a sessão incluindo isso na url (use &se você já usa ?um $_GETparâmetro)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
Ganso
fonte