Las cookies no funcionan con subdominios

11

Tenemos un sitio principal en example.com. Iniciar sesión example.com/adminfunciona bien allí.

Pero en un sitio de prueba en test.example.com/adminNo puedo iniciar sesión en el administrador sin eliminar primero todas las example.comcookies. Entonces puedo iniciar sesión, pero tan pronto como inicie sesión, example.com/adminmi siguiente clic en el servidor de prueba me devuelve a la página de inicio de sesión.

No sé si esto afecta los inicios de sesión de los clientes.

¿Hay alguna configuración en el sitio principal o en el sitio de prueba que resolvería este problema?

Buttle Butkus
fuente

Respuestas:

14
  1. En el menú Admin, seleccione Sistema> Configuración. Luego, en el panel de la izquierda, en General, haga clic en Web.
  2. Expanda la sección Administración de cookies de sesión

En la example.comtienda, configure lo siguiente:

  1. Establezca el dominio de cookies en example.com (por lo general, esta configuración sería .example.com con un punto en el frente, puede intentarlo sin él en este caso).

En la test.example.comtienda, configure lo siguiente:

  1. Establezca el dominio de Cookie en .test.example.com en el entorno de prueba. (el "." delante del dominio debería estar bien aquí)
Anna Völkl
fuente
2
¡Solo una nota, el Paso 3 sobre el .frente del dominio, es importante!
B00MER
Hola Anna. ¿Debería establecerse el dominio de cookies en ".example.com" en el example.comadministrador, el test.example.comadministrador o ambos?
Buttle Butkus
Lo establecería como configuración predeterminada (que es su administrador de example.com, supongo). Entonces esto significa .example.com para todos los ámbitos.
Anna Völkl
@ AnnaVölkl No estoy seguro aquí. Entiendes que tengo dos instalaciones de magento completamente separadas en dos máquinas diferentes, ¿verdad? Uno usa example.com, el otro test.example.com. Ambos tienen sus propios administradores. Pero solo me está diciendo que establezca un dominio para uno de los administradores. ¿Estás diciendo que debería dejar el otro en blanco?
Buttle Butkus
Ah, ya veo. De hecho, no sabía que se trata de 2 instalaciones separadas. ¿La tienda principal funciona con o sin www-Domain? Puede configurar el dominio de cookies en la prueba en test.example.comy en la tienda principal www.example.compara evitar la superposición de cookies.
Anna Völkl
9

Anna hace algunos buenos comentarios y su respuesta funcionará para mucha gente, pero no para mí, así que estoy publicando mi propia respuesta. Quizás mi problema fue mucho más fundamental que el que ella aborda.

Mi solución fue cambiar el dominio de mi sitio de example.coma www.example.com. De hecho, mi investigación en Internet sugiere que la razón por la cual los sitios como Amazon, Google, Ebay y cualquier otro destino web importante usan el wwwprefijo puede deberse en gran parte a la forma en que funcionan las cookies. Tal vez no.

La forma predeterminada en que funciona una cookie es que se aplica a todos los subdominios. Entonces, si le example.comenvía una cookie, entonces usted visita mail.example.com, smile.example.como devsite.example.com, entonces su navegador enviará esa cookie a esos sitios y esos sitios intentarán usar la cookie. Pero no podrán encontrar su sesión a menos que todos usen una carpeta de sesión común. E incluso entonces, es probable que tenga problemas debido a las diferentes configuraciones de la base de datos, las diferentes estructuras de aplicación, etc.

Hacer el cambio implicó crear redirecciones 301 en mi archivo htaccess raíz, cambiar las URL seguras / inseguras en la core_config_datatabla de la base de datos magento , cambiar el sitio ServerNameen Apache VirtualHostsy actualizar la configuración de DNS / servidor de nombres. Pero valió la pena.

Al crear mi sitio principal www.example.com, sus cookies ahora solo se aplicarían a subdominios del mismo, como mail.www.example.com(y no tenemos ninguno de esos subdominios). Los navegadores de los clientes que obtienen la www.example.comcookie no la envían devsite.example.com, y el problema está resuelto. Además, es realmente bueno tener un nombre wwwdelante de nuestro dominio.

Buttle Butkus
fuente
1
Desearía poder dar múltiples votos para esta respuesta. Estoy buscando una solución durante meses y todos siguen diciendo sobre Cookie Path y Cookie Domain, pero eso no solucionará el problema si no usa www. ¡¡Gracias!!
Bruno Monteiro
Ya tenemos www en el dominio de cookies, pero todavía falla ...
Negro
¿Qué sigue fallando?
Buttle Butkus
3

Simplemente puede cambiar el nombre de la cookie adminhtml para los subdominios.

Dos cambios en el archivo app/code/core/Mage/Core/Controller/Varien/Action.php.

En función preDispatchcambiar líneas

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

a

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

En setRedirectWithCookieCheckcambio de función

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

a

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

Y luego de esa búsqueda de texto

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

en todos los archivos y reemplazarlo con

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

si se encontrara alguna ocurrencia.

maxvgi
fuente
1
¿Puede explicar con palabras cómo su código altera las interacciones de cookies de cliente y servidor para aislar sesiones?
Buttle Butkus
@ButtleButkus el problema es que example.com/admin establece cookies con nombre adminhtmlpara el dominio .example.com. Cuando intenta autorizar al test.example.com/admin, trata de hacer algo con la cookie adminhtmlpara .test.example.com. Los problemas difieren en la configuración de Magento. El principal problema es que no puede modificar la cookie del dominio principal desde el subdominio. El código anterior hace que Magento cree cookies adminhtmlpara example.com y cookies adminhtml_subdomainpara subdominio.ejemplo.com, por lo que no se mezclarán de ninguna manera. Cambie subdomaina la correcta que usa.
maxvgi
Eso es bueno para el lado administrativo. Pero el lado frontal también debería cambiar el nombre de la cookie en este tipo de solución, ¿verdad?
Buttle Butkus
@ButtleButkus tienes razón. Lo siento, no escribí esto porque no tenía ese tipo de problema.
maxvgi
Está bien, todavía es útil para algunas personas probablemente.
Buttle Butkus
0

Si aún no puede iniciar sesión en su interfaz (no se puede crear la sesión del cliente) debido a problemas con las cookies, anule el archivo principal correspondiente

Pre 1.8.x. versiones - app / code / core / Mage / Customer / Model / session.php

y

desde 1.8.x. versión de la aplicación / código / core / Mage / Core / Model / Session / Abstract.php

Comente las líneas señaladas en este hilo. Esto ha solucionado el problema con el inicio de sesión del cliente en la interfaz de la tienda de versiones anteriores a la 1.8.x

/magento//a/34057/695

Haijerome
fuente