Les cookies ne fonctionnent pas avec les sous-domaines


11

Nous avons un site principal à example.com. La connexion example.com/adminfonctionne très bien là-bas.

Mais sur un site de test à, test.example.com/adminje ne peux pas me connecter à l'administrateur sans d'abord supprimer tous les example.comcookies. Ensuite, je peux me connecter, mais dès que je me connecte, example.com/adminmon prochain clic sur le serveur de test me renvoie à la page de connexion.

Je ne sais pas si cela affecte les connexions client.

Existe-t-il une configuration sur le site principal ou le site de test qui résoudrait ce problème?

Réponses:


14
  1. Dans le menu Admin, sélectionnez Système> Configuration. Ensuite, dans le panneau de gauche, sous Général, cliquez sur Web.
  2. Développez la section Gestion des cookies de session

Dans la example.comboutique, définissez les éléments suivants:

  1. Définissez le domaine des cookies sur example.com (généralement ce paramètre serait .example.com avec un point devant, vous pouvez l'essayer sans dans ce cas).

Dans la test.example.comboutique, définissez les éléments suivants:

  1. Définissez le domaine Cookie sur .test.example.com sur l'environnement de test. (le "." devant le domaine devrait convenir ici)

2
Juste une note, l'étape 3 sur le .devant du domaine, c'est important!
B00MER

Bonjour Anna. Le domaine des cookies doit-il être défini sur ".example.com" dans l' example.comadministrateur, l' test.example.comadministrateur ou les deux?
Buttle Butkus

Je le définirais comme configuration par défaut (qui est votre administrateur example.com, je suppose). Cela signifie donc .example.com pour toutes les étendues.
Anna Völkl

@ AnnaVölkl, je ne suis pas sûr ici. Vous comprenez que j'ai deux installations magento complètement séparées sur deux machines différentes, non? L'un utilise example.coml'autre test.example.com. Ils ont tous deux leurs propres administrateurs. Mais vous me dites seulement de définir un domaine pour l'un des administrateurs. Voulez-vous dire que je devrais laisser l'autre vide?
Buttle Butkus

Ah, je vois. En effet, je ne savais pas que ce sont 2 installations distinctes. La boutique principale fonctionne-t-elle avec ou sans www-Domain? Vous pouvez définir le domaine des cookies sur le test vers test.example.comet sur la boutique principale www.example.compour éviter les chevauchements de cookies.
Anna Völkl

9

Anna fait de bons points et sa réponse fonctionnera pour beaucoup de gens, mais pas pour moi, donc je poste ma propre réponse. Peut-être que mon problème était beaucoup plus fondamental que celui qu'elle aborde.

Ma solution était de changer le domaine de mon site de example.comà www.example.com. En fait, mes recherches sur Internet suggèrent que la raison pour laquelle des sites comme Amazon, Google, Ebay et toutes les autres destinations Web importantes utilisent le wwwpréfixe peut être en grande partie due au fonctionnement des cookies. Peut être pas.

Le fonctionnement par défaut d'un cookie est qu'il s'applique à tous les sous-domaines. Donc , si example.comvous envoie un cookie, vous visitez mail.example.com, smile.example.comou devsite.example.com, votre navigateur envoie ce cookie à ces sites et ces sites essayera d'utiliser le cookie. Mais ils ne pourront pas trouver votre session à moins qu'ils n'utilisent tous un dossier de session commun. Et même dans ce cas, vous auriez probablement des problèmes en raison de différentes configurations de base de données, de différentes structures d'application, etc.

La modification impliquait la création de redirections 301 dans mon fichier racine htaccess, la modification des URL sécurisées / non sécurisées dans la core_config_datatable de base de données magento , la modification du site ServerNamedans Apache VirtualHostset la mise à jour des paramètres DNS / serveur de noms. Mais cela en valait la peine.

En créant mon site principal www.example.com, ses cookies ne s'appliqueraient désormais qu'à ses sous-domaines, tels que mail.www.example.com(et nous n'avons pas de tels sous-domaines). Les navigateurs clients qui obtiennent le www.example.comcookie ne l'envoient pas devsite.example.comet le problème est résolu. De plus, c'est vraiment sympa d'avoir un wwwdevant notre nom de domaine.


1
J'aimerais pouvoir donner plusieurs votes positifs pour cette réponse. Je cherche une solution depuis des mois et tout le monde ne cesse de dire sur le chemin des cookies et le domaine des cookies, mais cela ne résoudra pas le problème si vous n'utilisez pas www. Je vous remercie!!
Bruno Monteiro

Nous avons déjà www dans le domaine des cookies, mais il échoue toujours ...
Black

Qu'est-ce qui échoue encore?
Buttle Butkus

3

Vous pouvez simplement changer le nom du cookie adminhtml pour les sous-domaines.

Deux changements de fichier app/code/core/Mage/Core/Controller/Varien/Action.php.

Dans les preDispatchlignes de changement de fonction

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

à

$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 setRedirectWithCookieCheckchangement de fonction

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

à

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

Et après cette recherche de texte

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

dans tous les fichiers et remplacez-le par

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

si des occurrences seraient trouvées.


1
Pouvez-vous expliquer en mots comment votre code modifie les interactions des cookies client et serveur pour isoler les sessions?
Buttle Butkus

@ButtleButkus, le problème est que example.com/admin définit un cookie avec le nom adminhtmldu domaine .example.com. Lorsque vous essayez d'autoriser sur test.example.com/admin, il essaie de faire quelque chose avec le cookie adminhtmlpour .test.example.com. Les problèmes diffèrent sur les paramètres de Magento. Le problème principal est que vous ne pouvez pas modifier les cookies du domaine principal à partir du sous-domaine. Le code ci-dessus oblige Magento à créer des cookies adminhtmlpour example.com et des cookies adminhtml_subdomainpour subdomain.example.com, afin qu'ils ne se mélangent en aucune façon. Changez subdomainpour celui que vous utilisez.
maxvgi

C'est bon pour le côté administrateur. Mais le côté frontal devrait également changer le nom du cookie dans ce type de solution, non?
Buttle Butkus

@ButtleButkus vous avez raison. Désolé, je n'ai pas écrit ceci car je n'ai pas eu ce genre de problème.
maxvgi

C'est ok, toujours utile pour certaines personnes probablement.
Buttle Butkus

0

Si vous ne parvenez toujours pas à vous connecter à votre interface (la session client ne peut pas être créée) en raison des problèmes de cookies, veuillez remplacer le fichier principal respectif

Pré 1.8.x. versions - app / code / core / Mage / Customer / Model / session.php

et

à partir de 1,8.x. version app / code / core / Mage / Core / Model / Session / Abstract.php

Commentez les lignes indiquées dans ce fil. Cela a résolu le problème avec la connexion client sur le frontend sur le magasin de versions pré 1.8.x.

/magento//a/34057/695

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.