Skip to main content

Bandeau de consentement cookies

frontend/src/components/CookieBanner.vue, affiché globalement sur le site public (hors backoffice).

Dernière vérification contre le code

Vérifié le 2026-08-24 — introduit/corrigé par le commit "Analytics tracking, Cookie consent fix, and UI tweaks" (dd47824, sur main), documenté ici pour la première fois.

Ne pas confondre avec les consentements légaux du prêt scolaire

Ce bandeau est un consentement cookies/tracking, de type RGPD, affiché à tout visiteur du site public. Il n'a aucun rapport avec consent_data_processing/consent_electronic_signature du formulaire de prêt scolaire, qui concernent le traitement des données d'un dossier de crédit précis et sont stockés en base par demande — voir Consentements légaux pour ce second mécanisme, distinct et plus fort juridiquement (preuve horodatée par dossier, pas une préférence de navigation).

1. Choix proposés​

Trois boutons : Tout accepter, Tout refuser, Personnaliser (bascules par catégorie : "strictement nécessaires" toujours actif, "Analytics", "Personnalisation" — cette dernière liée au chatbot).

  • utb_cookie_consent : 'accepted' | 'declined' | 'partial'.
  • utb_cookie_prefs : { analytics: boolean, marketing: boolean } — utilisé uniquement quand utb_cookie_consent === 'partial'.

3. Bug corrigé le 2026-08-24 : le choix "Personnaliser" n'était pas respecté​

Avant ce correctif, router/index.js (router.afterEach, qui déclenche l'envoi de POST /api/analytics/visit — voir Analytics de fréquentation) ne vérifiait que consent === 'accepted'. Un visiteur choisissant "Personnaliser" puis activant uniquement Analytics (consent === 'partial') n'était jamais tracké, alors qu'il avait explicitement autorisé l'analytics — l'inverse de l'intention du bandeau. Corrigé en lisant aussi utb_cookie_prefs.analytics quand consent === 'partial'.

Indépendamment du consentement, router.afterEach exclut aussi systématiquement toute route commençant par /admin — le personnel backoffice n'est jamais tracké par ce mécanisme, quel que soit son choix sur le bandeau (qui ne s'affiche de toute façon que sur le site public).

4. Payload de tracking envoyé (si consenti)​

{ page, session_id, referrer: document.referrer, screen_resolution: '{width}x{height}', language: navigator.language } — session_id persisté en sessionStorage (utb_session_id, crypto.randomUUID()). Voir Analytics de fréquentation pour ce que le backend en fait (anonymisation IP incluse).