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?

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)

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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.