Cookies não funcionam com subdomínios

11

Temos um site principal em example.com. Fazer login example.com/adminfunciona bem lá.

Porém, em um site de teste em test.example.com/adminNão consigo fazer login no administrador sem primeiro excluir todos os example.comcookies. Então eu posso entrar, mas assim que eu entrar no example.com/adminmeu próximo clique no servidor de teste me levará de volta à página de login.

Não sei se isso afeta os logins do cliente.

Existe alguma configuração no site principal ou no site de teste que resolva esse problema?

Buttle Butkus
fonte

Respostas:

14
  1. No menu Admin, selecione Sistema> Configuração. Em seguida, no painel à esquerda, em Geral, clique em Web.
  2. Expanda a seção Gerenciamento de Cookies da Sessão

Na example.comloja, defina o seguinte:

  1. Defina o domínio do cookie como example.com (normalmente essa configuração seria .example.com com um ponto na frente; nesse caso, você pode tentar sem).

Na test.example.comloja, defina o seguinte:

  1. Defina o domínio do cookie como .test.example.com no ambiente de teste. (o "." na frente do domínio deve ficar bem aqui)
Anna Völkl
fonte
2
Apenas uma observação, a Etapa 3 sobre a .frente do domínio, é importante!
B00MER
Olá Anna. O domínio do cookie deve ser definido como ".example.com" no example.comadministrador, no test.example.comadministrador ou em ambos?
Buttle Butkus
Eu definiria como configuração padrão (que é o administrador do example.com, eu acho). Portanto, isso significa .example.com para todos os escopos.
Anna Völkl
@ AnnaVölkl Não tenho certeza aqui. Você entende que eu tenho duas instalações magento completamente separadas em duas máquinas diferentes, certo? Um usa example.com, o outro test.example.com. Ambos têm seus próprios administradores. Mas você está apenas me dizendo para definir um domínio para um dos administradores. Você está dizendo que eu deveria deixar o outro em branco?
Buttle Butkus
Ah entendo. Na verdade, eu não sabia que estas são duas instalações separadas. A loja principal opera com ou sem www-Domain? Você pode definir o domínio do cookie no teste para test.example.come na loja principal www.example.compara evitar sobreposição de cookies.
Anna Völkl
9

Anna faz alguns pontos positivos e sua resposta funcionará para muitas pessoas, mas não para mim, por isso estou postando minha própria resposta. Talvez meu problema fosse muito mais fundamental do que o que ela aborda.

Minha solução foi alterar o domínio do meu site de example.compara www.example.com. De fato, minha pesquisa na internet sugere que sites como Amazon, Google, Ebay e todos os outros destinos importantes da Web usam o wwwprefixo podem ser em grande parte devido à maneira como os cookies funcionam. Talvez não.

A maneira padrão em que um cookie funciona é que ele se aplica a todos os subdomínios. Portanto, se example.comvocê enviar um cookie, você visitará mail.example.com, smile.example.comou devsite.example.comseu navegador enviará esse cookie para esses sites e esses sites tentarão usá-lo. Mas eles não poderão encontrar sua sessão, a menos que todos usem uma pasta de sessão comum. E mesmo assim, você provavelmente terá problemas devido a diferentes configurações de banco de dados, diferentes estruturas de aplicativos etc.

Fazer a alteração envolvia a criação de redirecionamentos 301 no meu arquivo htaccess raiz, alteração dos URLs seguros / inseguros na core_config_datatabela de banco de dados magento , alteração do site ServerNameno Apache VirtualHostse atualização das configurações de DNS / servidor de nomes. Mas valeu bem a pena.

Ao criar meu site principal www.example.com, seus cookies agora se aplicariam apenas a subdomínios, como mail.www.example.com(e não temos nenhum subdomínio). Os navegadores clientes que recebem o www.example.comcookie não o enviam devsite.example.come o problema foi resolvido. Além disso, é muito bom ter um wwwna frente do nosso nome de domínio.

Buttle Butkus
fonte
1
Eu gostaria de poder dar vários Up Votos para esta resposta. Estou procurando uma solução há meses e todo mundo fica falando sobre o caminho do cookie e o domínio do cookie, mas isso não resolverá o problema se você não usar o www. Obrigado!!
Bruno Monteiro
Já temos www no domínio dos cookies, mas ainda falha ... #
Black
O que ainda falha?
Buttle Butkus
3

Você pode simplesmente alterar adminhtml nome do cookie para subdomínios.

Duas mudanças no arquivo app/code/core/Mage/Core/Controller/Varien/Action.php.

Nas preDispatchlinhas de mudança de função

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

para

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

Na setRedirectWithCookieCheckmudança de função

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

para

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

E depois dessa pesquisa por texto

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

em todos os arquivos e substitua-o por

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

se alguma ocorrência fosse encontrada.

maxvgi
fonte
1
Você pode explicar em palavras como seu código altera as interações de cookies de clientes e servidores para isolar sessões?
Buttle Butkus
@ButtleButkus, o problema é que example.com/admin define cookie com o nome adminhtmldo domínio .example.com. Quando você tenta autorizar a test.example.com/admin, ele tenta fazer algo com o cookie adminhtmlpara .test.example.com. Os problemas diferem nas configurações do Magento. O principal problema é que você não pode modificar o cookie do domínio principal a partir do subdomínio. O código acima faz com que o Magento crie cookies adminhtmlpara example.com e cookies adminhtml_subdomainpara subdomínio.exemplo.com, para que eles não se misturem de forma alguma. Mude subdomainpara o correto que você usa.
maxvgi
Isso é bom para o lado do administrador. Mas o lado da interface também deve mudar o nome do cookie nesse tipo de solução, certo?
Buttle Butkus
@ButtleButkus você está certo. Desculpe, não escrevi isso porque não tinha esse tipo de problema.
maxvgi
Tudo bem, ainda é útil para algumas pessoas, provavelmente.
Buttle Butkus
0

Se você ainda não conseguir fazer login no seu front-end (a sessão do cliente não pode ser criada) devido aos problemas de cookies, substitua o respectivo arquivo principal

Pré-1.8.x. versões - app / code / core / Mage / Customer / Model / session.php

e

de 1.8.x. versão app / code / core / Mage / Core / Model / Session / Abstract.php

Comente as linhas apontadas neste tópico. Isso corrigiu o problema com o login do cliente no front-end na loja da versão anterior à 1.8.x.

/magento//a/34057/695

Haijerome
fonte