Faut-il vraiment créer un compte pour comparer trois maisons côte à côte ? Demander une inscription avant de proposer un simple comparateur de biens revient à ajouter une friction que la plupart des visiteurs refusent, préférant fermer l’onglet plutôt que remplir un formulaire pour une fonctionnalité aussi ponctuelle.
Une agence immobilière qui veut un comparateur léger n’a pas besoin d’un compte utilisateur complet avec mot de passe et gestion de session serveur : un cookie stocké côté navigateur, contenant simplement la liste des identifiants de biens sélectionnés, remplit parfaitement ce rôle.
Stocker la sélection côté client
Contrairement à une session PHP qui vit côté serveur et expire à la fermeture du navigateur, un cookie classique persiste sur l’appareil du visiteur pendant une durée choisie, ce qui permet de revenir sur le site plusieurs jours plus tard sans perdre sa sélection en cours.
Ajouter un bien au comparateur en JavaScript

Un simple clic sur un bouton « Comparer » de la fiche produit ajoute l’identifiant du bien à un cookie, lu et écrit directement en JavaScript, sans requête serveur nécessaire pour cette seule action.
function ajouterAuComparateur( idBien ) {
let liste = document.cookie
.split('; ')
.find( ligne => ligne.startsWith('biens_compares=') );
let ids = liste ? JSON.parse( decodeURIComponent( liste.split('=')[1] ) ) : [];
if ( ! ids.includes( idBien ) && ids.length < 4 ) {
ids.push( idBien );
document.cookie = 'biens_compares=' + encodeURIComponent( JSON.stringify( ids ) )
+ '; max-age=' + ( 7 * 24 * 60 * 60 ) + '; path=/';
}
}
La limite de quatre biens, imposée directement dans la condition, évite un tableau comparatif illisible : au-delà de ce nombre, l’affichage côte à côte perd tout son intérêt pédagogique pour le visiteur.
Afficher le tableau comparatif
Une page dédiée lit le cookie côté serveur au chargement, récupère les fiches correspondantes via une requête WordPress classique, puis génère un tableau comparatif des caractéristiques principales : prix, surface, nombre de pièces, localisation.
$ids = isset( $_COOKIE['biens_compares'] )
? json_decode( stripslashes( $_COOKIE['biens_compares'] ), true )
: array();
$biens = get_posts( array(
'post_type' => 'bien_immobilier',
'post__in' => $ids,
'orderby' => 'post__in',
) );
Ce que le cookie ne fait pas
- Il ne synchronise rien entre le téléphone et l’ordinateur du visiteur
- Il disparaît si le visiteur efface ses données de navigation
- Il ne remplace aucune donnée statistique côté agence sur les biens réellement comparés
Pour un besoin ponctuel de comparaison rapide, ces limites restent largement acceptables : l’objectif reste d’aider à une décision immédiate, pas de construire un historique de navigation à long terme.
Un comparateur qui exige un compte perd des visiteurs avant même d’avoir démontré sa valeur ; commencez toujours par la version la plus légère possible.
Informer le visiteur sur le cookie utilisé
Même un cookie purement fonctionnel, sans finalité publicitaire, mérite d’être mentionné clairement dans la politique de confidentialité du site, avec une explication simple de son usage exclusif pour la fonction de comparaison.
Permettre de retirer un bien facilement
Un comparateur qui ne propose que d’ajouter des biens, sans possibilité simple d’en retirer un, finit par accumuler une sélection encombrante et peu pertinente. Un bouton « retirer » sur chaque colonne du tableau comparatif réécrit le cookie en excluant l’identifiant concerné, avec la même logique que l’ajout, mais inversée.
function retirerDuComparateur( idBien ) {
let liste = document.cookie
.split('; ')
.find( ligne => ligne.startsWith('biens_compares=') );
let ids = liste ? JSON.parse( decodeURIComponent( liste.split('=')[1] ) ) : [];
ids = ids.filter( id => id !== idBien );
document.cookie = 'biens_compares=' + encodeURIComponent( JSON.stringify( ids ) )
+ '; max-age=' + ( 7 * 24 * 60 * 60 ) + '; path=/';
}
En résumé
Un cookie léger, limité à quelques identifiants de biens, suffit à proposer un comparateur fonctionnel sans exiger de compte utilisateur ni développer de base de données dédiée. La synchronisation entre appareils demanderait, elle, un compte réel et une architecture bien plus lourde à mettre en place.