Kameleoon vous permet d’unifier les données de session entre tous les sous-domaines. Dans ce mode, Kameleoon suit les visiteurs sur plusieurs sous-domaines au sein du même domaine de premier niveau. Par exemple, Kameleoon peut enregistrer comme une seule visite dans le stockage local une visite qui a commencé sur un sous-domaine et s’est poursuivie sur un autre. Kameleoon recommande d’activer cette option pour utiliser les données de session sur tous les sous-domaines pour un ciblage comportemental avancé dans les campagnes de personnalisation. Cette configuration unifie les données stockées dans le stockage local pour tous les sous-domaines.
Si vous choisissez un tag d’implémentation qui ne prend pas en charge les données de session unifiées, Kameleoon traite une visite qui commence sur un sous-domaine comme une nouvelle visite dans le stockage local de l’appareil de l’utilisateur dès qu’elle atteint un autre sous-domaine. Cela signifie que Kameleoon réinitialise toutes les données collectées sur un sous-domaine (telles que les pages vues et le temps passé sur le site) sur le nouveau sous-domaine. En conséquence, le ciblage basé sur ces critères peut produire des résultats inattendus. Par exemple, si vous avez une campagne de personnalisation qui se déclenche à la quatrième page vue, un visiteur qui voit trois pages sur le premier domaine et charge une quatrième page sur un sous-domaine ne déclenchera la personnalisation que si vous activez les données de session unifiées.
Le partitionnement du stockage local sur différents sous-domaines n’affecte pas les données collectées pour l’analyse. Cette option n’est nécessaire que pour les campagnes couvrant plusieurs sous-domaines ou utilisant des données stockées localement sur différents sous-domaines.
Disponibilité :
Les navigateurs Safari ne prennent pas en charge les données de session unifiées en raison des restrictions de partitionnement du Local Storage. Pour y remédier, Kameleoon fournit un mécanisme de récupération utilisant un Server Synchronization Call (SSC). Grâce à cette méthode, Kameleoon obtient le visitorCode à partir du cookie kameleoonVisitorCode (défini par le serveur). Kameleoon vérifie ensuite si le visitorCode actuel dans LocalStorage est vide. S’il est vide, Kameleoon effectue un SSC pour récupérer toutes les données présentes dans LocalStorage depuis les serveurs backend de Kameleoon. Une fois cet appel terminé, Kameleoon restaure les données à leur état précédent.
Kameleoon active cette option par défaut sur le navigateur Safari.
Tag de suivi des données de session unifiées
Pour activer les données de session unifiées dans Kameleoon, hébergez un fichier <iframe> (fourni ci-dessous) sur le domaine principal (de premier niveau) de votre site web. Cet iframe se charge chaque fois qu’un visiteur navigue vers une page dont l’URL ne correspond pas au domaine principal du site web. Le fichier HTML de l’iframe est petit, statique et ne contient que du code immuable utilisé pour sauvegarder et restaurer les données du visiteur dans Local Storage.
Kameleoon recommande de récupérer le fichier d’origine à cette URL : https://developers.kameleoon.com/resources/iframe_template.html. Vous pouvez également télécharger le fichier directement (cliquez avec le bouton droit sur le lien et sélectionnez Enregistrer le lien sous…).
À l’intérieur du code de l’iframe, modifiez deux variables :
Pour garantir des performances optimales, mettez en place le cache pour le fichier de l’iframe. Comme le fichier reste statique, le navigateur n’a pas besoin de le télécharger plusieurs fois. Configurez la mise en cache sur le serveur en utilisant l’en-tête HTTP suivant :
Cache-Control: max-age=2592000
En plus d’héberger l’iframe, incluez le snippet d’installation suivant. Fournissez la valeur correcte pour la variable kameleoonIframeURL. Définissez cette variable sur l’URL où l’iframe est accessible sur votre site web.
<script>
// Change the value of this URL to point to your own URL, where the iFrame is hosted
window.kameleoonIframeURL = "https://www.customerdomain.com/path/to/kameleoon-iframe.html";
window.kameleoonLightIframe = false;
var kameleoonIframeOriginElement = document.createElement("a");
kameleoonIframeOriginElement.href = kameleoonIframeURL;
window.kameleoonIframeOrigin = kameleoonIframeOriginElement.origin || (kameleoonIframeOriginElement.protocol + "//" + kameleoonIframeOriginElement.hostname);
if (location.href.indexOf(window.kameleoonIframeOrigin) != 0) {
window.kameleoonLightIframe = true;
var kameleoonProcessMessageEvent = function(event) {
if (window.kameleoonIframeOrigin == event.origin && event.data.slice && event.data.slice(0,9) == "Kameleoon") {
window.removeEventListener("message", kameleoonProcessMessageEvent);
window.kameleoonExternalIFrameLoaded = true;
if (window.Kameleoon) {
Kameleoon.Utils.runProtectedScript(event.data);
Kameleoon.Analyst.load();
} else {
window.kameleoonExternalIFrameLoadedData = event.data;
}
}
};
if (window.addEventListener) {
window.addEventListener("message", kameleoonProcessMessageEvent, false);
}
var iframeNode = document.createElement("iframe");
iframeNode.src = kameleoonIframeURL;
iframeNode.id = "kameleoonExternalIframe";
iframeNode.style = "float: left !important; opacity: 0.0 !important; width: 0px !important; height: 0px !important;";
document.head.appendChild(iframeNode);
}
</script>
Hébergez le fichier de l’iframe sur vos serveurs dans le domaine principal du site web. Pour plusieurs sous-domaines, choisissez le plus important. Cette étape est obligatoire pour les équipes techniques. Kameleoon utilise toujours le domaine principal pour stocker le contenu dans le Local Storage du navigateur. Si l’URL actuelle correspond au domaine principal, le moteur Kameleoon peut écrire directement les données dans l’espace Local Storage associé. Si l’URL appartient à un autre domaine, Kameleoon charge le fichier de l’iframe, qui contient du code statique permettant uniquement de lire et d’écrire des données Kameleoon sur le domaine principal.
Vous pouvez utiliser le snippet de données de session unifiées dans une installation Tag Manager.
Tag unifié avec anti-flicker
Si vous utilisez le tag unifié et le tag asynchrone avec anti-flicker, vous devez ajouter les trois balises de script dans l’ordre suivant :
- Tag asynchrone avec anti-flicker.
- Script de données de session unifiées.
- Tag d’installation Kameleoon.
<script>
// Duration in milliseconds to wait while the Kameleoon application file is loaded
var kameleoonLoadingTimeout = 750;
window.kameleoonQueue = window.kameleoonQueue || [];
window.kameleoonStartLoadTime = Date.now();
if (! document.getElementById("kameleoonLoadingStyleSheet") && ! window.kameleoonDisplayPageTimeOut) {
var kameleoonS = document.getElementsByTagName("script")[0];
var kameleoonCc = "html::after { content: ''; position: fixed; inset: 0; background: #fff; z-index: 2147483647; }";
var kameleoonStn = document.createElement("style");
kameleoonStn.type = "text/css";
kameleoonStn.id = "kameleoonLoadingStyleSheet";
if (kameleoonStn.styleSheet) {
kameleoonStn.styleSheet.cssText = kameleoonCc;
} else {
kameleoonStn.appendChild(document.createTextNode(kameleoonCc));
}
kameleoonS.parentNode.insertBefore(kameleoonStn, kameleoonS);
window.kameleoonDisplayPage = function(fromEngine) {
if (!fromEngine) {
window.kameleoonTimeout = true;
}
if (kameleoonStn.parentNode) {
kameleoonStn.parentNode.removeChild(kameleoonStn);
}
};
window.kameleoonDisplayPageTimeOut = window.setTimeout(window.kameleoonDisplayPage, kameleoonLoadingTimeout);
}
</script>
<script>
// Change the value of this URL to point to your own URL, where the iFrame is hosted
window.kameleoonIframeURL = "https://www.customerdomain.com/path/to/kameleoon-iframe.html";
window.kameleoonLightIframe = false;
var kameleoonIframeOriginElement = document.createElement("a");
kameleoonIframeOriginElement.href = kameleoonIframeURL;
window.kameleoonIframeOrigin = kameleoonIframeOriginElement.origin || (kameleoonIframeOriginElement.protocol + "//" + kameleoonIframeOriginElement.hostname);
if (location.href.indexOf(window.kameleoonIframeOrigin) != 0) {
window.kameleoonLightIframe = true;
var kameleoonProcessMessageEvent = function(event) {
if (window.kameleoonIframeOrigin == event.origin && event.data.slice && event.data.slice(0,9) == "Kameleoon") {
window.removeEventListener("message", kameleoonProcessMessageEvent);
window.kameleoonExternalIFrameLoaded = true;
if (window.Kameleoon) {
Kameleoon.Utils.runProtectedScript(event.data);
Kameleoon.Analyst.load();
} else {
window.kameleoonExternalIFrameLoadedData = event.data;
}
}
};
if (window.addEventListener) {
window.addEventListener("message", kameleoonProcessMessageEvent, false);
}
var iframeNode = document.createElement("iframe");
iframeNode.src = kameleoonIframeURL;
iframeNode.id = "kameleoonExternalIframe";
iframeNode.style = "float: left !important; opacity: 0.0 !important; width: 0px !important; height: 0px !important;";
document.head.appendChild(iframeNode);
}
</script>
<script src="//SITE_CODE.kameleoon.io/engine.js" fetchpriority="high" async></script>
Si vous ne pouvez pas héberger un iframe, Kameleoon fournit le mécanisme Server Synchronization Call (SSC). Cette fonctionnalité récupère toutes les données du visiteur depuis les serveurs backend de Kameleoon lorsqu’un visiteur passe du domaine principal à un sous-domaine. Après l’appel, Kameleoon stocke les données dans le Local Storage du navigateur à des fins de ciblage.Pour activer cette option, contactez votre Customer Success Manager.Notez ce qui suit :
- Le SSC peut augmenter la probabilité de clignotement dans les expériences si le segment de ciblage inclut des données stockées lors de visites ou pages précédentes, car le moteur Kameleoon attend les données.
- Certaines fonctionnalités, comme le mode Simulation, ne fonctionnent pas lors de la simulation d’une expérience qui s’exécute sur plusieurs domaines. Pour utiliser cette fonctionnalité, lancez la simulation sur les deux domaines.
Vulnérabilité des données de session unifiées
Lorsque vous utilisez une configuration avec des données de session unifiées, un problème de sécurité potentiel peut survenir. Comme Kameleoon écrit toutes les données du visiteur dans le stockage local appartenant à un domaine externe, un site web malveillant pourrait potentiellement lire ces données en incluant votre iframe dans sa page. Une fois chargé, l’iframe renverrait toujours les données Kameleoon via un appel postMessage(). La réponse pourrait inclure des données personnalisées contenant des informations confidentielles ou sensibles.
Cette exploitation n’affecte que les visiteurs qui visitent d’abord votre site web puis le site malveillant. Par conséquent, un attaquant ne peut pas obtenir les données de tous vos visiteurs. Pour renforcer la sécurité, restreignez l’accès à l’iframe à une liste spécifiée de domaines et sous-domaines. Fournissez cette liste dans la variable allowedDomains à l’intérieur du fichier iFrame statique.
Kameleoon utilise les trois mesures suivantes pour renforcer la sécurité de l’iframe :
- Restriction de l’accès aux domaines identifiés : Le code de l’iframe inclut une variable allowedDomains qui spécifie les domaines autorisés à demander l’iframe. Seuls les domaines listés peuvent charger et exécuter du code depuis l’iframe Kameleoon.
- Restriction de l’accès aux site codes identifiés : Le code de l’iframe inclut une variable siteCode qui garantit que seul un moteur Kameleoon avec le site code spécifié peut demander l’iframe.
- Local Storage préfixé : L’iframe et Kameleoon ne lisent et n’écrivent que des entrées qui commencent par le préfixe “kameleoon”. Kameleoon ne peut lire ou écrire aucune autre donnée, ce qui ajoute une couche de sécurité supplémentaire.
Pour activer les données de session unifiées, l’iframe Kameleoon doit se charger sur tous vos domaines. Ne définissez pas d’en-tête de réponse X-Frame-Options.
Kameleoon héberge les projets sur soit kameleoon.eu soit kameleoon.io selon leur date de création. Utilisez le domaine affiché dans l’application Kameleoon pour votre projet.